我开发了一个使用Soap Web Service的android 2.1应用程序。 当我的应用程序启动时,它首先检查是否存在互联网连接。
如果是,它将显示相应的活动。 如果没有,那么它将显示一个活动(NetworkErrorActivity),提供有关网络错误和所有的信息。
问题是如果没有互联网连接,它会显示NetworkErrorActivity。 现在,当用户按下按钮时,它会将用户重定向到Home。 我已经覆盖了onBackPressed方法,如下所示:
@覆盖 public void onBackPressed(){
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
按下后退按钮后,它会显示android主屏幕。 但问题是,当我再次启动相同的应用程序时,即使存在网络连接,它也会向我显示NetworkErrorActivity。无法从Main Launcher Activity启动应用程序。它总是一次又一次地向我显示相同的活动。
答案 0 :(得分:1)
我使用AlertDialog(非活动)来通知用户需要网络连接,并选择将其连接到网络设置(启用移动/ Wi-Fi)连接。如果他们选择单击“取消”而我强制主要活动完成()。
检查主活动onResume()中的网络连接,如果没有连接,则调用CreateNetErrorDialog()...不能使用BACK来关闭对话框 - 只有取消会杀死主要活动。
示例...
protected void CreateNetErrorDialog(String errorMessage) {
Log.d(TAG, "CreateNetErrorDialog() entered...");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(errorMessage)
.setTitle("Unable to connect")
.setCancelable(false)
.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
startActivity(i);
}
}
)
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyMainActivity.this.finish();
}
}
);
AlertDialog alert = builder.create();
alert.show();
Log.d(TAG, "Exiting CreateNetErrorDialog()...");
}
编辑:从AsyncTask的onPostExecute()方法调用CreateNetErrorDialog - 它在UI线程上运行(doInBackground没有)。我自己的代码示例......
private class FileDownloader extends AsyncTask<String, Void, Void> {
private Boolean Success = false;
private String ResultString = "";
@Override
protected Void doInBackground(String... params) {
try {
// Do whatever
}
catch (Exception e) { // <-- Use the correct exception type
ResultString = "Some error message";
}
}
@Override
protected void onPostExecute(Void result) {
if (!Success)
CreateNetErrorDialog (ResultString);
else
// Do whatever
}
}
答案 1 :(得分:0)
我不知道你想要什么,但尝试这样的事情,而不是在catch block
中建立连接并编写代码,这不是一个好习惯
检查代码后的网络使用
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
然后取决于上面代码的结果
if (ni == null)
{
//Show you network error activity
}
else
{
//Show some other activity
}