내 활동에서 AsyncTask
을 호출하여 웹에서 문자열을 다운로드합니다. 문자열이 다운로드되면 문자열을 내 활동으로 전달하여 구문 분석하고 ListView
을 채 웁니다. ArrayAdapter의 IllegalStateException
onPostExecute()
에서 호출되는 내 활동 방법을 생성하고이 코드가 무엇인지입니다 :
@Override
protected void onPostExecute(String res) {
IndexPicker index = new IndexPicker();
index.onAsyncFinish(res);
}
이 내 onASyncFinish()
방법 :
populateListView
방법에서
public void onAsyncFinish(String json) {
ArrayList<Index> arrayList = parseJSON(json);
populateListView(arrayList);
}
}
입니다 IllegalStateException - ArrayAdapter의 생성자가 호출 될 때 발생합니다.
public IndexItemAdapter(Context context, int layoutResourceId,
ArrayList<Index> data) {
super(context, layoutResourceId, data); // This line.
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
이
는 로그 캣입니다 : 연구 후E/AndroidRuntime(821): FATAL EXCEPTION: main
E/AndroidRuntime(821): java.lang.IllegalStateException: System services not available to Activities before onCreate()
E/AndroidRuntime(821): at android.app.Activity.getSystemService(Activity.java:4463)
E/AndroidRuntime(821): at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
E/AndroidRuntime(821): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
E/AndroidRuntime(821): at com.test.exampleapp.index.IndexItemAdapter.<init>(IndexItemAdapter.java:23)
E/AndroidRuntime(821): at com.test.exampleapp.activity.IndexPicker.populateListView(IndexPicker.java:39)
E/AndroidRuntime(821): at com.test.exampleapp.activity.IndexPicker.onAsyncFinish(IndexPicker.java:56)
E/AndroidRuntime(821): at com.test.exampleapp.async.DownloadIndexJSON.onPostExecute(DownloadIndexJSON.java:45)
E/AndroidRuntime(821): at com.test.exampleapp.async.DownloadIndexJSON.onPostExecute(DownloadIndexJSON.java:1)
E/AndroidRuntime(821): at android.os.AsyncTask.finish(AsyncTask.java:631)
E/AndroidRuntime(821): at android.os.AsyncTask.access$600(AsyncTask.java:177)
E/AndroidRuntime(821): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
E/AndroidRuntime(821): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(821): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(821): at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(821): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(821): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(821): at dalvik.system.NativeStart.main(Native Method)
, 분명히 문제는 IndexPicker index = new IndexPicker();
를 사용하여 onASyncFinish 메소드를 호출하고있는 방법입니다. 나는이 테스트가 주 스레드에서 네트워킹을 시도했을 때 올바른 것이라고 믿는다. listview가 올바르게 채워질 것이다.
그래서 내 질문은, 내가 내 ASyncTask 결과를 전달하고 내 목록보기를 채울 수 있도록이 문제를 해결하는 가장 좋은 방법은 무엇입니까.