android线程在没有互联网连接时崩溃应用程序

标签 android multithreading

这是我的 logcat 错误 strace

06-17 10:50:59.578: E/AndroidRuntime(1899): FATAL EXCEPTION: AsyncTask #1
06-17 10:50:59.578: E/AndroidRuntime(1899): java.lang.RuntimeException: An error occured while executing doInBackground()
06-17 10:50:59.578: E/AndroidRuntime(1899):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.lang.Thread.run(Thread.java:856)
06-17 10:50:59.578: E/AndroidRuntime(1899): Caused by: java.lang.NullPointerException
06-17 10:50:59.578: E/AndroidRuntime(1899):     at com.merimasjid.prayertimes.hijri.FavouritePagePrayerTimes1$LoadTimes.doInBackground(FavouritePagePrayerTimes1.java:561)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at com.merimasjid.prayertimes.hijri.FavouritePagePrayerTimes1$LoadTimes.doInBackground(FavouritePagePrayerTimes1.java:1)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-17 10:50:59.578: E/AndroidRuntime(1899):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
06-17 10:50:59.578: E/AndroidRuntime(1899):     ... 4 more

我有一个线程,它在应用程序启动时自动执行,并且该线程在 fragment 中定义。该线程从互联网上获取一些 JSON 数据并将其显示在屏幕上,当数据连接或 wifi 打开时应用程序运行正常,但在没有数据包数据的情况下,它只是在启动时使应用程序崩溃

class LoadTimes extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //pBar.setVisibility(View.VISIBLE);
    }


    protected String doInBackground(String... args) {
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
    //  params.add(new BasicNameValuePair("areaID","0"));

        try{
        params.add(new BasicNameValuePair("MasjidID",String.valueOf(_appPrefs.getFavOneID())));
        params.add(new BasicNameValuePair("Date", getParameterisedDate()));
        //params.add(new BasicNameValuePair("date",getParameterisedDate()));
        }catch(Exception e){}
        JSONObject json = null;
        try{
        json = jsonParser.makeHttpRequest(URL_GET_TIMES, "GET",
                params);
        }catch(Exception e){}

        // Check your log cat for JSON response
        Log.d("Outbox JSON: ", json.toString());
        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");

        try {

            albums = json.getJSONArray("masjids");
            // looping through All messages

            if(albums!=null){
            for (int i = 0; i < albums.length(); i++) {
                JSONObject c = albums.getJSONObject(i);

                        Date d1 = df.parse(c.getString("FajarAzan"));
                        SunrH = d1.getHours();
                        SunRM = d1.getMinutes();

                        Date d2 = df.parse(c.getString("FajarAzan"));
                        fajrH = d2.getHours();
                        fajrM = d2.getMinutes();

                        Date d3 = df.parse(c.getString("ZoharAzan"));
                        DhuhrH = d3.getHours();
                        DhuhrM = d3.getMinutes();

                        Date d4 = df.parse(c.getString("AsarAzan"));
                        AsrH = d4.getHours();
                        AsrM = d4.getMinutes();

                        Date d5 = df.parse(c.getString("Maghrib"));
                        MaghribH = d5.getHours();
                        MaghribM = d5.getMinutes();


                        Date d6 = df.parse(c.getString("IshaAzan"));
                        IshaH = d6.getHours();
                        IshaM = d6.getMinutes();


                        _appPrefs.storeFavouriteMasjidTimes(fajrH, fajrM, SunrH, SunRM, DhuhrH, DhuhrM, AsrH, AsrM, MaghribH, MaghribM, IshaH, IshaM, day, month, year, _appPrefs.getFavOneID());
                    try{
                        initNamazTimes();
                    }catch(Exception e){}
                    /*
                        namazTimesH = new int[]{fajrH,SunrH,DhuhrH,AsrH,MaghribH,IshaH};
                        namazTimesM = new int[]{fajrM,SunRM,DhuhrM,AsrM,MaghribM,IshaM};*/

            }
            }
        } catch (Exception e) {
        //  pBar.setVisibility(View.GONE);
        //  
        //  cantGet = true;
            publishProgress(null);
            Log.e("Exception while Loading Times",e.toString());
        }

        return null;
    }

    @Override
    public  void onProgressUpdate(String... args) {
        super.onProgressUpdate(args);
        try{
        FetchStoreFavouriteNamazTimings.cantGetNamazTimes();}catch(Exception e){}

    }
    protected void onPostExecute(String file_url) {
    if(cantGet)
        {
            FetchStoreFavouriteNamazTimings.cantGet = false;
        }
        else{   
            try{
            generateButtonsAlarms();
            generateButtonsFavourites();}
            catch(Exception e){}
            /////////////////////////////////////////////////////////////////////
        }
    }

}

最佳答案

JSONObject json = null; 

try{
   json = jsonParser.makeHttpRequest(URL_GET_TIMES, "GET", params);
}catch(Exception e){
   // handle me!
}

你说没有互联网连接,所以可能引发了一个你没有处理的异常。稍后您访问肯定为 nulljson 对象。

更新:

大多数其他答案建议在执行 AsyncTask 之前检查互联网连接。但这不是一个完整的解决方案,因为在“检查”之后和网络调用之前连接可能会丢失,这将导致相同的异常。

您必须处理异常!检查互联网连接不能解决问题。

关于android线程在没有互联网连接时崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261767/

相关文章:

Android 应用程序使用大量 RAM 的原因以及如何减少

java - 以编程方式检查是否授予锁定?

java - 运动 : What is the best/safe way to shutdown a worker?

android - MapView onCreate 在 LG 设备上抛出 NullPointerException

android - 如何在运行时更改 android 启动器 Activity ?

android - 如何通过应用销毁保持 Android BLE 连接

Android,在与 ImageView 的图像相同的 URL 处制作图像

java - int[] 在 Java 和 C++ 之间共享?

ios - 创建线程安全单例的正确方法是什么?

c++ - 本土工作队列与英特尔 TBB