无法暂停我的Android应用程序

时间:2012-07-30 03:26:17

标签: android android-asynctask

我希望我的Android应用程序在收到服务器的resond后暂停一段时间。我正在使用以下代码来尝试暂停我的程序:

private Handler mHandler;
private Runnable mCountUpdater = new Runnable() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
         mHandler.postDelayed(this, 15000); 
    } 
}; 

但不管我是否以下面提到的任何一种方式拨打等待,它都不起作用 1.放入按钮处理程序:

btnin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    //set the values
    grab.onPreExecute("TechID", Build.SERIAL);
    grab.onPreExecute("Type", "Checkin");
    //set the destination and send the request
    grab.execute(new String[]{"http://192.168.1.150/Me/check.php"});
    //close the activity
    mHandler = new Handler(); 
    mHandler.post(mCountUpdater);
    finish();
    }
});

2.在AsynTask的onPostExecute()方法中输出:

private class GrabURL extends AsyncTask<String, Void, Void>{
//ArrayList object for storing the string pairs
ArrayList<NameValuePair> nameValuePairs;

public GrabURL() { 
    //constructor of the class
    nameValuePairs = new ArrayList<NameValuePair>(); 
} 

protected void onPreExecute(String key, String value) {
    //store the pair of values into the ArrayList 
    nameValuePairs.add(new BasicNameValuePair(key,value));
}

@Override
protected Void doInBackground(String... urls) {
      // TODO Auto-generated method stub
      //Operation being executed in another thread
      try{
          //set up the type of HTTPClient
          HttpClient client = new DefaultHttpClient();
          //set up the location of the server
          HttpPost post = new HttpPost(urls[0]);
          //translate form of pairs to UrlEncodedFormEntity 
          UrlEncodedFormEntity ent = new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
          //set up the entity being sent by post method
          post.setEntity(ent);
          //execute the url and post the values
          //client.execute(post);
          HttpResponse responsePOST = client.execute(post); 
          HttpEntity resEntity = responsePOST.getEntity();
          line = EntityUtils.toString(resEntity);
    } catch (Exception e) {
        //catch the exception
        line = "Can't connect to server";
    }
    return null;
}

protected void onPostExecute(Void unused) {
        mRespond.setVisibility(View.VISIBLE); 
        mRespond.setText(line); 
        btnin.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext(), "Value updated", Toast.LENGTH_SHORT).show();
        mHandler = new Handler(); 
        mHandler.post(mCountUpdater);   
}
}

这是我用来暂停程序的方式不正确还是我把等待功能置于错误的位置?

1 个答案:

答案 0 :(得分:1)

在收到服务器的响应后,我不明白要暂停一下。顺便说一句,你说“暂停”是什么意思?我无法想象暂停申请的任何理由。

您可能希望在服务器的响应即将到来时(而不是之后)添加加载程序,并且可能还需要停用或隐藏按钮。在这种情况下,您应该在grab.execute之前执行更改并删除onPostExecute中的更改。

此外,我认为mCountUpdater正在创建一个无限循环。所以,我会深深地重新思考这些代码。请注意,Runnable.postDelay并不会停止应用程序,它只是在指定时间内延迟执行某些Runnable,但同时,应用程序仍在运行。

如果您更好地解释该解决方案的需要,我可能会帮助您更多。