限制android中的对话间隔

时间:2014-04-20 17:05:29

标签: java android android-asynctask sharedpreferences progressdialog

我正在从我的Android应用程序调用服务器。我使用 AsyncTask 线程完成了这项工作。 现在我已经在 onPreExecute()方法中启动了Progress Dialog,如下所示:

protected void onPreExecute(){ 
dialog = new ProgressDialog(appcontext);
dialog.setMessage("Sending Position...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}

现在,在 doInBackground()方法中,我一直在执行发送数据任务。在得到响应之后,我将使用 onPostExecute()方法使用 dialog.dismiss()来停止 ProgressDialog

我的doInBackGround()代码

protected String doInBackground(Position... position){
    InputStream inputStream = null;
    String temp=null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://10.0.2.2:8084/WebApplication5/getData");
String json = "";
JSONObject jsonObject = new JSONObject();
try { 
     jsonObject.accumulate("time",position[0].getTime()); 
     json = jsonObject.toString();
     StringEntity se = new StringEntity(json);
     httpPost.setEntity(se);
     httpPost.setHeader("Accept", "application/json");
     httpPost.setHeader("Content", "application/json");
     org.apache.http.HttpResponse httpResponse = httpclient.execute(httpPost);

  **// CODE ACTUALLY BLOCKS HERE UNTIL I GET A RESPONSE.(WHAT I THINKS). THOUGH WORKS 99%** 

     inputStream = httpResponse.getEntity().getContent();
     if(inputStream!=null)
          temp="sent"; 
 }
 catch (JSONException e){
     e.printStackTrace();
 }
 catch (IllegalStateException e) {
     e.printStackTrace();
     } 
 catch (IOException e) {
     e.printStackTrace();
     }
    return temp;
}

一切都很精细,但有时我没有得到回应(让它成为任何服务器错误),在这种情况下,对话框无法解除并且无限期地运行。我想限制 doInBackGround()方法的持续时间几秒钟。因此,即使没有响应,它也会转移到 onPostExecute(),我的infinte going对话框应该停止。

其次,如果我收到回复,我想将其保存到我的SharedPreferences中,所以我的问题是最好的方法是什么,即

1)我应该在 onPause()方法中进行。

2)或者,在 onStop()方法中,

3)或 onPostExecut()e 方法

或者没有意义,我可以在任何地方做到。

我的最后一个问题是共享偏好设置中存储的数据的生命周期是什么。

1 个答案:

答案 0 :(得分:0)

您可以将其保存在您想要的位置,您可以将其保存到onPause之后(在您的活动暂停时调用)

如果用户要修改它并且您需要保存它,请将其保存在onPause中。

或者,如果你只需要它,你就不会再将它保存在onPostExecute中,或者每次更改它时都会更改它。

SharedPreference没有“生命周期”,只有在应用程序位于设备中或用户不清除数据应用程序之前,它才会存在。

对于您的doBackground,您可以为请求添加超时。

更改您的代码块:

HttpClient httpclient = new DefaultHttpClient();

BasicHttpParams params = new BasicHttpParams();
ConnManagerParams.setTimeout(params, TIMEOUT_IN_MILLISECONDS); // example: 2000 for 2 seconds
HttpClient httpClient = new DefaultHttpClient(params);