【发布时间】:2015-10-02 09:22:46
【问题描述】:
我正在执行从我的网络主机获取数据的 AsyncTask。为了让我检索数据,我需要重新打开我的应用程序。如何每秒获取数据?我知道 AsyncTask 只能执行一次,但我不仅需要它用于我的应用程序,还需要它来了解这个问题。希望向各位学习。
顺便说一下,这是我的代码:
class AsyncDataClass2 extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params) {
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
HttpConnectionParams.setSoTimeout(httpParameters, 5000);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpPost httpPost = new HttpPost(params[0]);
String jsonResult = "";
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", params[1]));
nameValuePairs.add(new BasicNameValuePair("password", params[2]));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpPost);
jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return jsonResult;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
if (result.equals("") || result == null)
{
Toast msg = Toast.makeText(MapsActivity.this, "connection failed", Toast.LENGTH_LONG);
msg.setGravity(Gravity.CENTER, 0, 0);
msg.show();
}
else
{
Toast msg = Toast.makeText(MapsActivity.this, "connected", Toast.LENGTH_LONG);
msg.setGravity(Gravity.CENTER,0,0);
msg.show();
}
try {
JSONArray json = new JSONArray(result);
for (int i = 0; i < json.length(); i++) {
JSONObject e = json.getJSONObject(i);
String point = e.getString("Point");
String[] point2 = point.split(",");
String devStatus = e.getString("Status"); //now, let's process the Status...
String strOwner = e.getString("Owner"); //now, let's process the owner...
//==============================================================================
if (devStatus.equals("fire")) {
IsThereFire=true;
}
} //---End of FOR LOOP---//
}//---end of TRY---//
catch (JSONException e)
{
e.printStackTrace();
}
}
private StringBuilder inputStreamToString(InputStream is)
{
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try
{
while ((rLine = br.readLine()) != null)
{
answer.append(rLine);
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return answer;
}
}
编辑:
先生,这是我用的计时器..
///---CODE for the TIMER that ticks every second and synch to database to update status---///
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
// HERE IS THE ACTUAL CODE WHERE I CALL THE ASYNCDATACLASS2
AsyncDataClass2 performBackgroundTask = new AsyncDataClass2();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
//---------------------------------------------------------------//
【问题讨论】:
-
我怎样才能每秒获取数据? 这对于异步任务来说似乎太快了,无法互相跟进。你这样做的目的是什么?
-
我正在尝试在我的数据库中检索状态,并且该状态每 X 秒更改一次。现在我想知道在不关闭-重新打开我的应用程序的情况下发生的变化,我该怎么做?
-
@Christina 看看这里stackoverflow.com/questions/6207362/…
-
如果你取出
runOnUiThread()和里面的整个Runnable,只留下AsyncTask后面的AsyncTask行会怎样?
标签: android timer android-asynctask intervals