私はAsyncTaskを使用してファイルからデータを読み取ります。私は、アプリケーションを実行すると上記のエラーが発生します。AsyncTaskを使用している場合のExceptionInInitializerError
エラーメッセージは、次のとおり
3月29日20:06:08.445:E/AndroidRuntime(13191): java.lang.ExceptionInInitializerError 3月29日20:06:08.445: E/AndroidRuntime (13191): でcom.google.app.BouncingBall.HighScore.loadFromFile(HighScore.java:81) 3月29日20:06:08.445:E/AndroidRuntime(13191): com.google.appで.BouncingBall.HighScore(HighScore.java:24)03から29 20:06:08.445:E/AndroidRuntime(13191):com.google.app.BouncingBall.Bo で(BouncingBallActivity.java:173) 03-29 20:06:08.445:E/AndroidRuntime(13191): でcom.google.app.BouncingBall.BouncingBallActivity $ BouncingBallView.run(BouncingBallActivity.java:173) ) 03-29 20:06:08.445:E/AndroidRuntime(13191): の場合java.lang.Thread.run(Thread.java:1019)03-29 20:06:08.445: E/AndroidRuntime(13191) :原因:java.lang.RuntimeException: Looper.prepare()を呼び出さなかったスレッド内でハンドラを作成できない 03-29 20:06:08.445:E/AndroidRuntime(13191): android.osハンドラー(Handler.java:121)
コード
the documentation forAsyncTask
を引用
private void loadFromFile()
{
new AsyncDataStorage().execute(FILENAME);
}
class AsyncDataStorage extends AsyncTask<String, Integer, Boolean> {
protected Boolean doInBackground(String... args) {
try {
FileInputStream fis = context.openFileInput(FILENAME);
byte[] raw = new byte[fis.available()];
String rawData=null;
while(fis.read()!=-1)
{
rawData = new String(raw);
}
return (processRawData(rawData));
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
Runnableで 'com.google.app.BouncingBall.HighScore.loadFromFile'を呼び出すか、AsyncTaskを作成してUIスレッド –
にバインドされたハンドラにポストするだけです。私はそれを受け入れることができるように答えとして書くようにしてください。 –
確かに、私のanswer.thanksを参照してください! –