onPostExecute
メソッドでAsyncTask
が終了したときにインテントを開始しようとすると問題が発生します。私が最初にAsyncTask
と呼ぶときは、スプラッシュ画面のアクティビティにあります。onPostExecuteでのアクティビティの開始
public class SplashScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
startJsonGet();
}
public void startJsonGet() {
JsonGet getData = new JsonGet(mBuildings, SplashScreen.this);
getData.execute();
}
}
これはJsonGet
クラス
public class JsonGet extends AsyncTask<Void, Void, Void> {
Context context;
JsonGet(ArrayList<Building> mBuildings, Context context){
super();
this.mBuildings = mBuildings;
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// before making http calls
}
@Override
protected Void doInBackground(Void... arg0) {
JsonParser jsonParser = new JsonParser();
String json = jsonParser
.getJSONFromUrl("");
Log.e("Response: ", "> " + json);
if (json != null) {
try {
//Does stuff
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent i=new Intent(context, MainActivity.class);
context.startActivity(i);
}
}
JSONが正しく解析している呼び出し、ログはこのことを示しています。しかし、ポストのインテントをコールしようとするとクラッシュします。私は別のクラスからこのJsonGet
関数を呼び出す必要があります。 (例:ユーザーが更新ボタンをクリックしたときにJsonデータを更新する)スプラッシュスクリーンクラスからインテントを呼び出すことはできません。ここで
は私がasynctaskに問題が表示されていない
10-25 16:03:12.156 8481-8481/com.andrewcode.broncomaps E/eglCodecCommon﹕ writeFully: failed: Broken pipe
10-25 16:03:12.156 8481-8481/com.andrewcode.broncomaps E/EGL_emulation﹕ tid 8481: eglChooseConfig(576): error 0x3001 (EGL_NOT_INITIALIZED)
10-25 16:03:12.164 8481-8481/com.andrewcode.broncomaps E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalArgumentException: eglChooseConfig failed EGL_NOT_INITIALIZED
at android.view.HardwareRenderer$GlRenderer.chooseEglConfig(HardwareRenderer.java:893)
at android.view.HardwareRenderer$GlRenderer.initializeEgl(HardwareRenderer.java:845)
at android.view.HardwareRenderer$GlRenderer.initialize(HardwareRenderer.java:786)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1502)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
あなたはリーダー/ライターを閉じますか? –
HardwareRendererクラスのソースコードを読んで、その例外がスローされた理由を理解する必要があります。ここにリンクがあります:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/view/HardwareRenderer.java#HardwareRenderer.GlRenderer.chooseEglConfig %28%29 –