2011-10-30 3 views
0

ファイルからテキストを取得し、それをTextViewで表示したいとします。ファイルからソートする

私は、zapisi()メソッドを使用して、poenibrojanjeという名前の1つの文字列と1つの整数を3.txtというファイルに書き込むクラスを持っています。

public void zapisi() { 
    // WRITING 
    String eol = System.getProperty("line.separator"); 
    String a = txtIme.getText().toString(); 
    try { 
     FileOutputStream fOut = openFileOutput("3.txt", MODE_APPEND); 

     OutputStreamWriter osw = new OutputStreamWriter(fOut); 

     osw.write("Ime: " + a + " Poeni: " + a1.poenibrojanje + eol); 

     // Log.d("Writing", "This is writing log: " + a + 
     // +a1.poenibrojanje); 

     // osw.flush(); 
     osw.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

また、ファイルから読み込んだクラスをTextViewに表示します。そのクラスはRankPrikazActivityと呼ばれ、ここでは完全なコードです。

パッケージcom.test.brzoracunanje;

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class RankPrikazActivity extends Activity implements OnClickListener { 
TextView tvRank, tvRankPrikaz; 
Button btnPovratak; 



protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.rankprikaz); 

    tvRank = (TextView)findViewById(R.id.tvRank); 
    tvRankPrikaz = (TextView)findViewById(R.id.tvRankPrikaz); 
    btnPovratak = (Button)findViewById(R.id.btnPovratak); 
    btnPovratak.setOnClickListener(this); 
    citaj(); 

} 


@Override 
public void onClick(View v) { 

    Intent intent = new Intent(this,PocetnaActivity.class); 
    startActivity(intent); 


} 

public void citaj() { 
    // READING 
    String eol = System.getProperty("line.separator"); 
    try { 
     BufferedReader input = new BufferedReader(new InputStreamReader(
       openFileInput("3.txt"))); 
     String line; 
     StringBuffer buffer = new StringBuffer(); 
     while ((line = input.readLine()) != null) { 
      buffer.append(line + eol); 
     } 
     //Log.d("Reading log", "This is reading log:" + buffer); 
     //System.out.println(buffer); 
     tvRankPrikaz.setText(buffer.toString()); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

}

このクラスの下citaj()メソッドと呼ばれる方法で、私は、ファイルからそれを読むと、このラインでのTextViewでそれを示しています。

tvRankPrikaz.setText(buffer.toString()); 

今、私はそれを表示したいですこのテキストボックスにRankActivityクラスの整数poenibrojanjeでソートされます。

どうすればよいですか?

+0

英語の単語に基づいて名前(クラス、フィールド、メソッドなど)を行うことをお勧めします。 – hovanessyan

+0

ええ、私は今なぜ英語の命名をすべきか見ています。とにかく、RankActivityクラスからpoenibrojanje整数でソートする必要があります。そこではファイルに書き込んで読み込み、RankPrikazActiviyクラスでソートして表示します。 – Zookey

+0

ファイルにデータ表現を表示できましたか? –

答えて

1

は、代わりにこれを試してみてください:

ここ
public void citaj() { 
    // READING 
    try { 
     BufferedReader input = new BufferedReader(new InputStreamReader(
       openFileInput("3.txt"))); 
     String line; 
     TreeMap<Integer,String> sorted_map = new TreeMap<Integer,String>(new Comparator(){ 
      public int compare(Object o1, Object o2){ 
      Integer i1 = (Integer)o1; 
      Integer i2 = (Integer)o2; 
      return -(i1.compareTo(i2)); 
      } 
      public boolean equals(Object o1){ 
      return this == o1; 
      } 
     }); 
     while ((line = input.readLine()) != null) { 
      Pattern intsOnly = Pattern.compile("\\d+"); 
      Matcher makeMatch = intsOnly.matcher(line); 
      makeMatch.find(); 
      Integer inputInt = Integer.valueOf(makeMatch.group()); 
      sorted_map.put(inputInt, line); 
     } 
     //Log.d("Reading log", "This is reading log:" + buffer); 
     //System.out.println(buffer); 
     String toOutput = ""; 
     for(Integer i: sorted_map.keySet()){ 
      toOutput += sorted_map.get(i) + "\n"; 
     } 
     tvRankPrikaz.setText(toOutput); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
+0

これはランクがunsoretdに見える方法です:http://www4.slikomat。com/11/1030/eua-unsort.jpgこれはあなたのコードでどのように見えるかです:http://www4.slikomat.com/11/1030/zi4-sorted.jpgそれは何らかの形で整理されていますが、順調ではありません。私はpoenibrojanjeと呼ばれる整数でソートする必要があります。この写真では "Poeni"です。 – Zookey

+0

あなたのプログラムの出力は私のコードでどのように見えますか? –

+0

2番目の画像はあなたのコードです。私はどこに問題があるか知っています。ここでは読み込み結果をString行に入れていますが、ファイル3.txtには1つの文字列と1つの整数が並んでいます。だから、それは文字列の行でファイルから読み込むので、それを認識しません。 – Zookey

0

代わりにdatabaseを使用することです。次に、選択クエリを実行すると、ORDER BY句を使用して結果をソートすることができます。

2

だけではなく、あなたのコードの読取部にこれらの行を置く:

StringBuffer buffer = new StringBuffer(); 
LinkedList<String> strings = new LinkedList<String>(); 
while ((line = input.readLine()) != null) { 
    strings.add(line); 
} 
Collection.sort(strings); 

String text = ""; 
for(String string : strings) { 
    text += string + eol; 
} 
tvRankPrikaz.setText(text); 
+0

これはランクがunsoretdのように見える方法です:www4.slikomat.com/11/1030/eua-unsort.jpgコードでどのように見えるかは次のとおりです:www4.slikomat.com/11/1030/zi4-sorted.jpgソート済みどういうわけか良い順ではありません。私はpoenibrojanjeと呼ばれる整数でソートする必要があります。この写真では "Poeni"です。 – Zookey

+0

番号または名前でソートしますか? –

+0

数字でソートしたい。 – Zookey

1

を私はあなたの番号でソートの簡単な例を書きました。

あなたがしなければならないのは、そのキーの値をファイルから取得し、マップのキーとしてそれを入れ、文字列、および文字列(リンク)から整数を解析することです...

この私はちょうど私が書いた例です。必要に応じて調整する必要があります。

Map<Double, String> map = new HashMap<Double, String>(); 
     map.put(new Double(22.02), "TEST 1"); 
     map.put(new Double(12.3), "TEST 2"); 
     map.put(new Double(1.3), "Test 3"); 
     Set<Double> nums = map.keySet(); 
     Collection<String> strings = map.values(); 
     Object[] Arr = nums.toArray(); 
     List list= Arrays.asList(Arr); 
     Collections.sort(list); 
     for(Object o: list) 
      map.put((Double) o, map.get(o)); 


     for(Double d: map.keySet()) 
      Log.i("TEST", map.get(d)); 
+0

Hvala、Nikola :)私はこれについてもっと学びたいので、これを後で見ていきますが、現在はKurtis Nusbaumのコードがうまくいきます。 :) – Zookey

+0

ネマの問題:)良い仕事を続けてください:) –

関連する問題