java - 当互联网连接失败时,AsyncTask doInBackground 返回空指针异常

标签 java android android-intent android-asynctask

DomenK 检查连接后,我遇到了下一个错误,我的 try catch block 如下所示:

try
            {
               if (isNetworkAvailable(getApplicationContext()))
                  updateJSONdata();
            }
            catch (Exception ex)
            {
               Toast.makeText(getApplicationContext(), "shit happens", Toast.LENGTH_SHORT).show();
               finish();
            }

01-06 19:24:41.221: E/AndroidRuntime(2174): FATAL EXCEPTION: main
01-06 19:24:41.221: E/AndroidRuntime(2174): java.lang.NullPointerException
01-06 19:24:41.221: E/AndroidRuntime(2174):     at com.flex.sklepik.ReadComments.updateList(ReadComments.java:253)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at com.flex.sklepik.ReadComments$LoadComments.onPostExecute(ReadComments.java:317)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at com.flex.sklepik.ReadComments$LoadComments.onPostExecute(ReadComments.java:1)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at android.os.AsyncTask.finish(AsyncTask.java:417)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at android.os.Looper.loop(Looper.java:130)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at android.app.ActivityThread.main(ActivityThread.java:3701)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at java.lang.reflect.Method.invokeNative(Native Method)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at java.lang.reflect.Method.invoke(Method.java:507)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
01-06 19:24:41.221: E/AndroidRuntime(2174):     at dalvik.system.NativeStart.main(Native Method)

我的应用程序工作得很好,但是当异步工作时互联网连接中断时,我的应用程序就会死掉。下面是我的 logcat 和异步代码块。也许有人可以帮助我如何制作 try catch block 或一些可以检测互联网连接问题、取消下一个作业、自动返回到第一个 Activity 并通过互联网连接问题烤简单信息的东西。

异步任务

public class LoadComments extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(ReadComments.this);
            pDialog.setMessage("ŁADUJĘ LISTĘ SKLEPÓW");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
            wczytajMape();
            idzDoPolozenia(52.249665, 21.012511, 10);
        }

        @Override
        protected Boolean doInBackground(Void... arg0) {
            // we will develop this method in version 2

                updateJSONdata();


            return null;

        }

        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
            pDialog.dismiss();
            // we will develop this method in version 2
            updateList();
            ustawMape();
            mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        }

    }

堆栈跟踪:

01-06 18:52:14.583: E/AndroidRuntime(32139): FATAL EXCEPTION: AsyncTask #1
01-06 18:52:14.583: E/AndroidRuntime(32139): java.lang.RuntimeException: An error occured while executing doInBackground()
01-06 18:52:14.583: E/AndroidRuntime(32139):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.lang.Thread.run(Thread.java:1019)
01-06 18:52:14.583: E/AndroidRuntime(32139): Caused by: java.lang.NullPointerException
01-06 18:52:14.583: E/AndroidRuntime(32139):    at com.flex.sklepik.ReadComments.updateJSONdata(ReadComments.java:195)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at com.flex.sklepik.ReadComments$LoadComments.doInBackground(ReadComments.java:294)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at com.flex.sklepik.ReadComments$LoadComments.doInBackground(ReadComments.java:1)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-06 18:52:14.583: E/AndroidRuntime(32139):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-06 18:52:14.583: E/AndroidRuntime(32139):    ... 4 more
01-06 18:52:14.793: W/ResourceType(32139): getEntry failing because entryIndex 13 is beyond type entryCount 2
01-06 18:52:14.793: W/ResourceType(32139): Failure getting entry for 0x7f0b000d (t=10 e=13) in package 0 (error -2147483647)
01-06 18:52:14.793: E/GooglePlayServicesUtil(32139): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
01-06 18:52:14.813: W/ResourceType(32139): getEntry failing because entryIndex 13 is beyond type entryCount 2
01-06 18:52:14.823: W/ResourceType(32139): Failure getting entry for 0x7f0b000d (t=10 e=13) in package 0 (error -2147483647)
01-06 18:52:14.823: E/GooglePlayServicesUtil(32139): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
01-06 18:52:15.173: W/Ads(32139): There was a problem getting an ad response. ErrorCode: 2
01-06 18:52:15.193: E/WindowManager(32139): Activity com.flex.sklepik.ReadComments has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@2afc3688 that was originally added here
01-06 18:52:15.193: E/WindowManager(32139): android.view.WindowLeaked: Activity com.flex.sklepik.ReadComments has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@2afc3688 that was originally added here
01-06 18:52:15.193: E/WindowManager(32139):     at android.view.ViewRoot.<init>(ViewRoot.java:267)
01-06 18:52:15.193: E/WindowManager(32139):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
01-06 18:52:15.193: E/WindowManager(32139):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-06 18:52:15.193: E/WindowManager(32139):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.Dialog.show(Dialog.java:241)
01-06 18:52:15.193: E/WindowManager(32139):     at com.flex.sklepik.ReadComments$LoadComments.onPreExecute(ReadComments.java:285)
01-06 18:52:15.193: E/WindowManager(32139):     at android.os.AsyncTask.execute(AsyncTask.java:391)
01-06 18:52:15.193: E/WindowManager(32139):     at com.flex.sklepik.ReadComments.onResume(ReadComments.java:147)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.Activity.performResume(Activity.java:3832)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2131)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2156)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1680)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.ActivityThread.access$1500(ActivityThread.java:121)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
01-06 18:52:15.193: E/WindowManager(32139):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 18:52:15.193: E/WindowManager(32139):     at android.os.Looper.loop(Looper.java:130)
01-06 18:52:15.193: E/WindowManager(32139):     at android.app.ActivityThread.main(ActivityThread.java:3701)
01-06 18:52:15.193: E/WindowManager(32139):     at java.lang.reflect.Method.invokeNative(Native Method)
01-06 18:52:15.193: E/WindowManager(32139):     at java.lang.reflect.Method.invoke(Method.java:507)
01-06 18:52:15.193: E/WindowManager(32139):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
01-06 18:52:15.193: E/WindowManager(32139):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
01-06 18:52:15.193: E/WindowManager(32139):     at dalvik.system.NativeStart.main(Native Method)

最佳答案

您必须修复此处的错误:

01-06 18:52:14.583: E/AndroidRuntime(32139): Caused by: java.lang.NullPointerException
01-06 18:52:14.583: E/AndroidRuntime(32139):    at com.flex.sklepik.ReadComments.updateJSONdata(ReadComments.java:195)

检查您在 ReadComments.java:195 行中引用的内容,并确保检查它是否为空指针。

我想您从服务器获取空字符串,请记住检查连接状态是不够的,可能还有其他故障导致数据错误或为空。服务器可能已关闭、无法访问、或者 dns 可能已关闭、或者服务器可能返回 HTTP 错误,...您必须处理所有此类情况。

关于java - 当互联网连接失败时,AsyncTask doInBackground 返回空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956248/

相关文章:

java - Spring Boot - 流式传输 Apache FileUpload - 流意外结束

android - 同一个 RadioGroup 中的 RadioButtons,但可以选择两个按钮

java - 每次运行应用程序时都会创建一个新数据库吗?

java - java中的速率控制

java - 通知在特定时间自动取消

android - 等待 5 秒

android - 获取 Android 设备的唯一 ID?

android - 打开并关闭youtube视频的Android应用

android - 使用 Intent 将数据从 Activity 传递到 Service

android - 通过伪造 NFC 标签扫描来测试应用程序