gpt4 book ai didi

android - 没有网络连接时应用崩溃

转载 作者:行者123 更新时间:2023-12-03 16:28:42 29 4
gpt4 key购买 nike

我正在尝试从我的应用程序中的网站获取一些信息(一些文本)。问题是有时我的方法不起作用。我已经建立了这个并将其用于检查Internet连接:

private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

但是,有时电话会告诉应用程序Tere实际上是互联网连接,当没有实际的稳定连接时,应用程序就会崩溃。

信息的实际刷新在Async任务中,并按以下方式执行,其中crackerTask是我的async任务:
if (this.isNetworkAvailable()) {

crackerTask.execute(TESTSTRINGURL);}

else {
Toast.makeText(NewsAndAnnouncements.this,
"No web connectivity. Try again later.", Toast.LENGTH_LONG)
.show();
}

当我的手机告诉应用程序有互联网但没有互联网时,如何避免程序崩溃?

编辑:
如果有帮助,这是异步任务。
private class NewsAsyncTask extends AsyncTask<String, String, String> {

ProgressDialog dialog1;

@Override
protected void onPreExecute() {
super.onPreExecute();
dialog1 = ProgressDialog.show(NewsAndAnnouncements.this, "Loading",
"Fetching data from web...");
}

@Override
protected String doInBackground(String... arguments) {
// extract arguments
String newsurl = arguments[0];
//
Document doc = null;
try {
doc = Jsoup.connect(newsurl).get();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
Elements myElements = doc.getElementsByClass("news_list");
string1 = myElements.toString();
Log.i("ELEMENTS HTML", string1);
return string1;
}

@Override
protected void onPostExecute(String result) {
// super.onPostExecute(result);
FINALSTRING = result;
tv2.setText(FINALSTRING);
if (dialog1 != null) {
if (dialog1.isShowing()) {
dialog1.dismiss();
}
}
}
}

最佳答案

那么为什么不将检查连接性移到AsyncTask内部呢?与先检查然后再运行任务以查明您没有任务相反,为什么不先在doInBackground内部实际使用Internet进行任何操作,然后直接检查AsyncTask内部。

编辑:我想我可能已经知道出了什么问题。设置Document doc = null,然后在try语句中,将doc设置为从互联网上获得的任何内容。但是,如果那行不通,则doc仍然为null,并且假设doc包含某些内容,您继续前进。使您的doInBackground看起来像这样:

protected String doInBackground(String... arguments) {
// extract arguments
String newsurl = arguments[0];
//
Document doc = null;
try {
doc = Jsoup.connect(newsurl).get();
Elements myElements = doc.getElementsByClass("news_list");
string1 = myElements.toString();
Log.i("ELEMENTS HTML", string1);
} catch (IOException e) {
e.printStackTrace();
string1 = null;
} catch (NullPointerException e) {
e.printStackTrace();
string1 = null;
}

return string1;
}

然后在 onPostExecute中,检查 result是否为null并做相应的事情。

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com