避免一次又一次地从JSON获取数据

奥利奥

我在MainActivity中从服务器解析JSON数据,但是每当我切换到另一个Activity然后再次调用MainActivity ...时,都会出现问题,它再次命中JSON URL,再次从JSON中获取数据。

为什么?而我已经从JSON下载了数据

public class MainActivity extends Activity {

    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");

        ListView listview = (ListView)findViewById(R.id.list);
        adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);

        listview.setAdapter(adapter);

        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long id) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), actorsList.get(position).getName(), Toast.LENGTH_LONG).show();              
            }
        });
    }


    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"));
                        actor.setDescription(object.getString("description"));
                        actor.setDob(object.getString("dob"));
                        actor.setCountry(object.getString("country"));
                        actor.setHeight(object.getString("height"));
                        actor.setSpouse(object.getString("spouse"));
                        actor.setChildren(object.getString("children"));
                        actor.setImage(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();
            adapter.notifyDataSetChanged();
            if(result == false)
                Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();

        }
    }   
}
本尼迪克特

尝试使用静态变量

 static boolean flag=false;
 static ArrayList<Actors> actorsList;

然后在调用AsyncTask之前检查flag是true还是false

if(!flag){
 actorsList = new ArrayList<Actors>(); //use this inside if statement
 new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");
flag=true;
}

因此,仅当标志为false时,异步任务才会执行...希望这会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Flutter:为什么setState((){})一次又一次地设置数据

高效的jQuery / JS-避免一次又一次地复制粘贴相同的代码

有什么办法避免“?” 标记一次又一次地在Swift中解包?

CoreData将数据一次又一次地添加到数据库中

通知被一次又一次地触发

在 Fortran 95 中一次又一次地读取文件的内容

如何一次又一次地调用URL

一次又一次地馈送avconv

内核一次又一次地死亡

无法一次又一次地在LinkedList中插入相同的元素

如何一次又一次地重复(递归)查询?

要重用jQuery函数,使函数一次又一次地使用

如何一次又一次地选择读/写?

init方法在servlet中一次又一次地调用

是否必须一次又一次地定义地图?

Stripe Payment API 一次又一次地发送令牌请求

一次又一次地从 FB-Messanger Webhook 获取相同的消息

我的数据在表视图中一次又一次地重新加载?

在 html 中一次又一次地浏览同一个文件

同一对象在C#中一次又一次地实例化

我希望我的程序一次又一次地运行而不会停止

Mongo JAVA driver-3.6 iterator()一次又一次地迭代单个文档

OnNavigationItemsSelected侦听器一次又一次地启动相同的活动

我可以重用UICollectionView吗?不想一次又一次地创建collectionView

房间迁移Alter Table不添加新列,迁移一次又一次地被调用

为什么 npm install 命令在 node app 中一次又一次地重新运行?

随着鼠标一次又一次地输入相同的链接,执行次数增加

如何在JavaScript中一次又一次地获得翻转效果?

在 jQuery 中,我不知道如何一次又一次地更改 attr

TOP 榜单

热门标签

归档