2012-01-10 21 views
0

私はこの問題に対するさまざまな解決策を見てきましたが、何もうまくいかないようです。Android App、resからテキストファイルを読む

私は、テキストファイルを読み込んでその一部を画面に表示するアプリケーションを作ろうとしています。私はファイルを読むのに問題があります。私は何が間違っているのか分かりません。私はコードをデバッグしていて、IO Java例外(fileNotFound)をスローします。コードのファイル読み込み部分を実行しません。私はwhileループには到達しません..到達する前に例外をスローします。

私はLogCatでのエラー出力がある/res/raw directory

にファイルを置く:私は、コードをコンパイルするとthreadid=3 Thread exiting due to uncaught exception

それはまた、私は私ドンので、理解していないライン48にNullPointerExceptionが文句を言いますデバッガのコードのその部分に達するようです。

私は間違っていますか?

public class AndroidReadTest extends Activity { 

HashMap<String, ArrayList<String>> table = new HashMap(); 

Random rand = new Random(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    String category = ""; 
    ArrayList<String> temp = new ArrayList(); 


    try { 
/**   AssetFileDescriptor descriptor = getAssets().openFd("AndroidReadTest/res/raw/questions"); 
     BufferedReader in = new BufferedReader(new FileReader(descriptor.getFileDescriptor())); */ 

     BufferedReader in = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.questions))); // I have tried adding .txt 

     while(in.readLine()!=null){ 

      ...... 

     } 
     table.put(category, temp); 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Button b = (Button) findViewById(R.id.button1); 
    b.setOnClickListener(click);  
} 

public String get(ArrayList<String> questions){ 

    int temp = questions.size();   
    String str = questions.get(rand.nextInt(temp)); 
    return str; 
} 

private OnClickListener click = new OnClickListener(){ 
    public void onClick(View V){ 
     TextView text = (TextView) findViewById(R.id.textView1); 
     text.append(get(table.get("---Cathegory")));  
    } 
}; 


} 
+0

に行くには良い方法かもしれませんが、私は、これはあまりにも動作するはずだと思います。どの行が48行ですか?それが 'BufferedReader in = ...'の行であれば、その行を別の変数( 'Resources'のためのもの、' InputStream'のためのものなど)に分割します。次にそれを再度実行して、 。 –

答えて

1

res/rawの代わりにプロジェクトのassetsフォルダにテキストファイルを入れてみてください。

This page has a nice overviewファイルの保存方法。

AssetManagerあなたのアクティビティからアクセスする方法です。

0

これが私の仕事:資産を使用して

InputStream inputStream = resources.openRawResource(R.raw.filename); 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
関連する問題