我正在使用AsyncTask從文件中讀取數據。我運行應用程序時遇到上述錯誤。使用AsyncTask時ExceptionInInitializerError
錯誤消息是:
03-29 20:06:08.445:E/AndroidRuntime(13191): java.lang.ExceptionInInitializerError 03-29 20:06:08.445: E/AndroidRuntime (13191): 在 com.google.app.BouncingBall.HighScore.loadFromFile(HighScore.java:81) 03-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 uncingBallActivity $ BouncingBallView.init(BouncingBallActivity.java:185) 03-29 20:06:08.445:E/AndroidRuntime(13191):at 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):at android.os的線程內創建處理程序。處理程序。(Handler.java:121)
守則
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;
}
}
只需將每個對「com.google.app.BouncingBall.HighScore.loadFromFile」的調用或在其中創建的AsyncTask封裝到Runnable中,然後將其發佈到綁定到UI線程的Handler – 2012-03-29 15:33:55
即可。你能否寫下這樣的答案,以便我能接受它。 – 2012-03-29 15:43:09
當然,看到我的答案!謝謝! – 2012-03-29 16:03:43