我使用AsyncTask从server中获取data,如果检查是否有可用的new data或update在existing data中的每10秒中发生变化,怎么办?
public class MainActivity extends Activity {
CenterLockHorizontalScrollview centerLockHorizontalScrollview;
ArrayList<Actors> actorsList;
ActorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actorsList = new ArrayList<Actors>();
new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");
centerLockHorizontalScrollview = (CenterLockHorizontalScrollview) findViewById(R.id.scrollView);
}
class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("Loading, please wait");
dialog.setTitle("Connecting server");
dialog.show();
dialog.setCancelable(false);
}
@Override
protected Boolean doInBackground(String... urls) {
try {
//------------------>>
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
// StatusLine stat = response.getStatusLine();
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("actors");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
Actors actor = new Actors();
actor.setName(object.getString("name"));
Log.d("Name:", object.getString("name"));
actor.setImage(object.getString("image"));
Log.d("Image:", object.getString("image"));
actorsList.add(actor);
}
return true;
}
//------------------>>
} catch (ParseException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
protected void onPostExecute(Boolean result) {
dialog.cancel();
if(result == false)
Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
if(actorsList != null) {
adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);
centerLockHorizontalScrollview.setAdapter(MainActivity.this, adapter);
}
}
}发布于 2014-10-16 11:07:03
可以使用刷新方法进行检查。
void refresh(boolean b){
if(b){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");
refresh(true);
}
}, 10*1000);
}
}在oncreate中调用此方法
new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");
refresh(true);发布于 2014-10-16 11:19:13
解决这个问题有几种方法。最合适的将主要取决于您的应用程序的规格,设计和架构的决定。
1) Java的TimerTask。
import java.util.Timer;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// work
}
}, 0, 10*1000); // 0 - time before first execution, 10*1000 - repeating of all subsequent executions
timer.cancel(); //cancels the timer and all schedules executions2) Android的Handler。强大的功能,通常用于您所要求的东西。但是,您必须确保不是嵌套处理程序。更多的信息here;它或多或少地描述了您想要使用处理程序的解决方案。
3)安卓的预定警报。即使这样可以,如果你真的想每10秒运行一些东西,那么,我会说这可能不是最好的解决方案。但是无论如何,这允许你注册安卓的警报,这让你有一点时间在BroadcastReceiver中运行一些东西,当警报被触发时就会触发。这里有很多内容,但是您可以在这里学习如何调度警报:https://developer.android.com/training/scheduling/alarms.html
https://stackoverflow.com/questions/26402683
复制相似问题