这是我的 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!
}
你说没有互联网连接,所以可能引发了一个你没有处理的异常。稍后您访问肯定为 null
的 json
对象。
更新:
大多数其他答案建议在执行 AsyncTask 之前检查互联网连接。但这不是一个完整的解决方案,因为在“检查”之后和网络调用之前连接可能会丢失,这将导致相同的异常。
您必须处理异常!检查互联网连接不能解决问题。
关于android线程在没有互联网连接时崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261767/