[英]Starting Application Again from MAIN & Clearing the activity stack
我已經開發了一個使用Soap Web Service的android 2.1應用程序。 當我的應用程序啟動時,它首先檢查是否存在Internet連接。
如果是這樣,它將顯示相應的活動。 如果沒有,它將顯示一個Activity(NetworkErrorActivity),其中提供有關網絡錯誤和所有錯誤的信息。
問題是如果沒有互聯網連接,它會向我顯示NetworkErrorActivity。 現在,當用戶按下“后退”按鈕時,它將用戶重定向到“主頁”。 我已經像這樣重寫了onBackPressed方法:
@Override 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。 無法從主啟動器活動中啟動應用程序。 它總是一次又一次地顯示相同的活動。
我使用AlertDialog(不是Activity)來通知用戶有關需要網絡連接的信息,並帶有將其轉到網絡設置(啟用移動/ Wi-Fi)連接的選項。 如果他們選擇單擊“取消”,則我將主要活動強制為finish()。
檢查主要活動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
}
}
我不確切知道您想要什么,但是嘗試這樣的方法,而不是建立連接並在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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.