在开始的onPostExecute活动 [英] Starting an Activity in onPostExecute

查看:557
本文介绍了在开始的onPostExecute活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想,当一个的AsyncTask 上的 onPostExecute 方法完成启动意图时,有一个问题。我第一次叫的AsyncTask 是闪屏的活动。

 公共类闪屏延伸活动{    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_splash);       startJsonGet();
    }    公共无效startJsonGet(){
        JsonGet的getData =新JsonGet(mBuildings,SplashScreen.this);
        getData.execute();    }
}

这调用 JsonGet

 公共类JsonGet扩展的AsyncTask<太虚,太虚,太虚> {    上下文语境;    JsonGet(ArrayList的<建筑> mBuildings,上下文的背景下){
        超();
        this.mBuildings = mBuildings;
        this.context =背景;
    }    @覆盖
    在preExecute保护无效(){
        super.on preExecute();
        //发出HTTP调用之前    }    @覆盖
    保护无效doInBackground(虚空......为arg0){
        JsonParser jsonParser =新JsonParser();
        JSON字符串= jsonParser
                .getJSONFromUrl();        Log.e(回应:,>中+ JSON);
        如果(JSON!= NULL){
            尝试{               //是否东东
                }            }赶上(JSONException E){
                // TODO自动生成catch块
                e.printStackTrace();
            }        }        返回null;
    }    @覆盖
    保护无效onPostExecute(虚空结果){
        super.onPostExecute(结果);
        意图I =新意图(背景下,MainActivity.class);
        context.startActivity(ⅰ);    }}

该JSON是正确地分析和日志说明这一点。但是,当我试图打电话给在岗的意图执行它崩溃。我需要从一个不同的类调用这个 JsonGet 功能。 (例:当用户点击刷新按钮更新JSON数据)所以调用从闪屏类的意图将无法工作。

下面是我得到的日志

  16 10-25:03:12.156 8481-8481 / com.andrew code.broncomaps E / EGL codecCommon:writeFully:失败:断的管
10-25 16:03:12.156 8481-8481 / com.andrew code.broncomaps E / EGL_emulation:TID 8481:eglChooseConfig(576):错误0x3001(EGL_NOT_INITIALIZED)
10-25 16:03:12.164 8481-8481 / com.andrew code.broncomaps E / AndroidRuntime:致命异常:主要
    java.lang.IllegalArgumentException异常:eglChooseConfig失败EGL_NOT_INITIALIZED
            在android.view.HardwareRenderer $ GlRenderer.chooseEglConfig(HardwareRenderer.java:893)
            在android.view.HardwareRenderer $ GlRenderer.initializeEgl(HardwareRenderer.java:845)
            在android.view.HardwareRenderer $ GlRenderer.initialize(HardwareRenderer.java:786)
            在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1502)
            在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
            在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:4351)
            在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:749)
            在android.view.Choreographer.doCallbacks(Choreographer.java:562)
            在android.view.Choreographer.doFrame(Choreographer.java:532)
            在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:735)
            在android.os.Handler.handleCallback(Handler.java:725)
            在android.os.Handler.dispatchMessage(Handler.java:92)
            在android.os.Looper.loop(Looper.java:137)
            在android.app.ActivityThread.main(ActivityThread.java:5041)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:511)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            在dalvik.system.NativeStart.main(本机方法)


解决方案

我看不出有任何AsyncTask的问题。问题似乎是与你的模拟器。尝试重新启动它。也许这个链接可以帮助你:<一href=\"http://stackoverflow.com/questions/13640139/egl-emulation-failed-to-establish-connection-to-host-android\">EGL_emulation未能建立连接到主机 - 机器人

I am having an issue when trying to start an intent when an AsyncTask is finished on the onPostExecute method. The first time I call the AsyncTask is in the splash screen activity.

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();

    }
}

This calls the JsonGet class

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);

    }

}

The JSON is parsing correctly, and the log shows this. But when I attempt to call an intent in the post execute it crashes. I need to call this JsonGet function from a different class. (Ex: Update the Json data when the user clicks a refresh button.) So calling the intent from the splash screen class will not work.

Here is the log that I get

    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)

解决方案

I don't see any problem with asynctask. Problem seems to be with your emulator. Try to restart it. Maybe this link helps you: EGL_emulation failed to establish connection to host - android

这篇关于在开始的onPostExecute活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆