我试图从我的应用中的网站(某些文字)中获取一些信息。问题是有时我的方法不起作用。我已经构建了这个并用它来检查互联网连接:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
然而,有时手机告诉应用程序tere确实是一个互联网连接,当没有实际稳定的,然后应用程序崩溃。
信息的实际刷新是在Async任务中执行,并且像这样执行,其中crackerTask是我的异步任务:
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();
}
}
}
}
答案 0 :(得分:2)
为什么不在AsyncTask内部移动检查连接呢?与之前检查然后运行任务以找出您没有它相反,为什么不在doInBackground
内部实际执行任何内容之前直接检查AsyncTask内部。
编辑 :我想我可能已经弄清楚出了什么问题。您设置Document doc = null
,然后在您的try语句中,将doc
设置为您从互联网获得的任何内容。但是,如果这不起作用,那么doc
仍然为空而且您继续前进,假设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
是否为空,并做相应的事情。
答案 1 :(得分:0)
检查互联网连接的方法
public boolean isConnectingToInternet()
{
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
并在所需的活动中调用
cd = new ConnectionDetector(getApplicationContext());
// Check if Internet present
if (!cd.isConnectingToInternet()) {
// Internet Connection is not present
alert.showAlertDialog(push.this,
"Internet Connection Error",
"Please connect to working Internet connection", false);
return;
}