首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncTask每10秒检查一次新数据

AsyncTask每10秒检查一次新数据
EN

Stack Overflow用户
提问于 2014-10-16 10:59:16
回答 2查看 877关注 0票数 0

我使用AsyncTaskserver中获取data,如果检查是否有可用的new dataupdateexisting data中的每10秒中发生变化,怎么办?

代码语言:javascript
复制
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); 
    }

    }

}
EN

回答 2

Stack Overflow用户

发布于 2014-10-16 11:07:03

可以使用刷新方法进行检查。

代码语言:javascript
复制
 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中调用此方法

代码语言:javascript
复制
 new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");
 refresh(true);
票数 2
EN

Stack Overflow用户

发布于 2014-10-16 11:19:13

解决这个问题有几种方法。最合适的将主要取决于您的应用程序的规格,设计和架构的决定。

1) Java的TimerTask。

代码语言:javascript
复制
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 executions

2) Android的Handler。强大的功能,通常用于您所要求的东西。但是,您必须确保不是嵌套处理程序。更多的信息here;它或多或少地描述了您想要使用处理程序的解决方案。

3)安卓的预定警报。即使这样可以,如果你真的想每10秒运行一些东西,那么,我会说这可能不是最好的解决方案。但是无论如何,这允许你注册安卓的警报,这让你有一点时间在BroadcastReceiver中运行一些东西,当警报被触发时就会触发。这里有很多内容,但是您可以在这里学习如何调度警报:https://developer.android.com/training/scheduling/alarms.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26402683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档