私はアンドロイドアプリケーションに取り組んでおり、php webservice からデータを取得しています。PHP Web サービスを呼び出す前に、インターネット接続を確認しています。接続がある場合は、非同期タスクのみが開始されます。しかし、ここで別の問題が発生しています。つまり、インターネット接続を確認した後、非同期メソッドでバックグラウンド タスクを実行しているときに、電源が突然切れて、クラッシュが発生することがあります。しかし、実際にはブール変数を取り、try アクションが実行されない場合は server=false を保持しました。しかし、パラメーターをphpに投稿するときにインターネット接続がない場合、メソッドをキャッチしないため、トーストメッセージが「再試行」として表示されません。実際に私が間違っていた場所を教えてください。
My code:
boolean server = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
if (haveNetworkConnection()) {
LongOperation1 op = new LongOperation1();
op.execute("");
} else {
Toast.makeText(getApplicationContext(),
"No Network Connection", Toast.LENGTH_LONG).show();
}
}
private void loadFeed()
{
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("val1",value1));
postParameters.add(new BasicNameValuePair("val2",value2));
try {
response = CustomHttpClient
.executeHttpPost(
"http://....................../file.php",
postParameters);
System.out.println("the ultimate response" + response);
}
catch (Exception e) {
server = false;
e.printStackTrace();
}
}
private boolean haveNetworkConnection() {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
private class LongOperation1 extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
loadFeed();
return "Executed";
}
@Override
protected void onPostExecute(String result) {
dialog1.dismiss();
try {
if (server) {
Toast.makeText(getApplicationContext(),
"Success", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(),
"Try Again", Toast.LENGTH_LONG).show();
}
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onPreExecute() {
dialog1 = ProgressDialog.show(Reuse.this, "Please wait...",
"Retrieving data ...", true);
}
@Override
protected void onProgressUpdate(Void... values) {
}
}