执行doInBackground()第112行时发生错误

时间:2014-03-16 03:43:42

标签: java android

我有时会收到以下崩溃报告:

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:112)
at org.json.JSONTokener.nextValue(JSONTokener.java:90)
at org.json.JSONObject.(JSONObject.java:154)
at org.json.JSONObject.(JSONObject.java:171)
at com.package.class.doMoreStuff(Student2.java:432)
at com.package.class$LoadAllProducts.doInBackground(Student2.java:608)
at com.package.class.Student2$LoadAllProducts.doInBackground(Student2.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more
java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:112)
at org.json.JSONTokener.nextValue(JSONTokener.java:90)
at org.json.JSONObject.(JSONObject.java:154)
at org.json.JSONObject.(JSONObject.java:171)
at com.package.class.doMoreStuff(Student2.java:432)
at com.package.class$LoadAllProducts.doInBackground(Student2.java:608)
at com.package.class.$LoadAllProducts.doInBackground(Student2.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)

我知道问题发生在第112行。该行的代码是:

    if(isTablet(context))
    {
        new online().execute();
    }
    else
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        mHandler.postDelayed(new Runnable() 
        {
            public void run() 
            {
                if(getResources().getConfiguration().orientation == 2)
                {
                    new online().execute();
                }
            }
        }, 200);
    }

第112行是else,我正在让应用程序检查它是否是平板电脑,如果没有旋转屏幕,请稍等一下再继续。我不得不设置延迟,否则它将在应用程序完全旋转之前继续并且会崩溃。我不确定是什么导致应用程序仅在设备上崩溃。

我刚注意到那里有if(getResources().getConfiguration().orientation == 2)行,这不是原因,是吗?

编辑: 第432行是

JSONObject jObject = new JSONObject(aBuffer);

1 个答案:

答案 0 :(得分:0)

我遇到的问题不是由第112行的某些代码引起的,而是由第432行的代码引起的:

JSONObject jObject = new JSONObject(aBuffer);

当变量aBuffer未初始化时,应用程序崩溃了。它与其余变量一起声明,但未初始化。它只是在try块中初始化,在某些情况下正在执行。我更改了代码,因此aBuffer将被初始化并修复问题。