アクティビティにボタンがあります。押すと、別のアクティビティがロードされます。このアクティビティでは、各セルに説明と画像を含むカスタム グリッド ビューがあります。非同期タスクを使用して、リモート サーバーからグリッド ビューにデータを入力しています。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isInternetAvailable) {
Intent intent = new Intent(menuActivity.this,
gridActivity.class);
startActivity(intent);
}
else {
MyAlertDialog.ShowAlertDialog(menuActivity.this,
"",
"No network connection",
"OK");
}
}
});
ここで testAsyncTask() を共有しています。gridActivity (2 番目のアクティビティ) の onCreate() でこの関数を呼び出しています。
private void testAsyncTask() {
new AsyncTask<Object, Object, Object>() {
@Override
protected void onPreExecute() {
progress_Dialog = ProgressDialog.show(a, "", "Loading");
}
@Override
protected Integer doInBackground(Object... params) {
try {
MenuService menuService = new MenuServiceImpl();
MenuServiceResponse pMenu = menuService.getMenu();
itemlist = pMenu.getMenu().getMenus();
return 0;
}
catch (MyServiceException e) {
MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK");
e.printStackTrace();
}
return 0;
}
@Override
protected void onPostExecute(Object result) {
if (progress_Dialog != null) {
progress_Dialog.dismiss();
}
try
{
adapter = new GridAdapter(
GridActivity.this, itemlist);
AllitemgridView.setAdapter(adapter);
}
catch(Exception e)
{
adapter = null;
MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "Check Network Connection", "OK");
}
}
}.execute();
}
ボタンを留めた最初のアクティビティで状態を確認しています。インターネットに接続している場合にのみ、開始アクティビティを起動します。
ここで私の問題に入ります。インターネットに接続していてボタンを押すと、startacvitiy が起動し、2 番目のアクティビティに移動します。2 番目のアクティビティの onCreate() で、testAsync() を呼び出しています。読み込みダイアログ ボックスが表示され、バックグラウンドでリモート サーバーからデータをフェッチします。
モデムの電源を切ると、アプリケーションが 5 ~ 6 秒間フリーズし、その後強制終了します。では、この例外をどのように処理できますか?
doInbackgorund() 内のコーディングにはインターネット接続が必要であり、Wi-Fi から切断したときにこのクラッシュが発生する原因である可能性があります。このクラッシュを処理するにはどうすればよいですか?