每次切换活动时都会输出双重的 JSON 结果。

huangapple 未分类评论45阅读模式
英文:

dubbel json output everytime switching activities

问题

问题是我目前面临的是:

在我的HomeActivity中,我从JSON中获取了一些输出。但这些值会发生变化,所以我必须保持HomeActivity更新。

当我在onRestart()中添加jsonrequest()时,

当我重新启动应用程序或在不同的活动之间切换时,它确实会获取到最新的值。但是每次我在不同的活动之间切换时,它都会添加更多的字段。例如:在我的JSON文件中,我有
用户名:约翰

HomeActivity显示约翰;在不同的活动之间切换时,HomeActivity显示;约翰 约翰 等等...

我在onCreate()中也有jsonrequest()。

    private void jsonrequest() {

        request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                JSONObject jsonObject  = null;
                for (int i = 0 ; i < response.length(); i++ ) {
                    try {
                        jsonObject = response.getJSONObject(i);
                        User user = new User();
                        user.setUsername(jsonObject.getString("username"));
                        lstUser.add(user);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                setuprecyclerview(lstUser);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });


        requestQueue = Volley.newRequestQueue(DashBoardActivity.this);
        requestQueue.add(request) ;
    }
英文:

the problem that i'm facing right now is;

on my homeactivity i have some outputs from json. but those values does change so i have to keep homeactivity updated.

when i add jsonrequest() in the onRestart()

it does get the latest values when i restart the app, or when i'm switching between activities. BUT everytime that i'm switching between activities it does add more fields. example: in my json file i do have
username: John

homeactivity shows John ; switching between activities, the homeactivity shows; John John etc..

i also have jsonrequest() in the onCreate()

    private void jsonrequest() {

        request = new JsonArrayRequest(JSON_URL, new Response.Listener&lt;JSONArray&gt;() {
            @Override
            public void onResponse(JSONArray response) {
                JSONObject jsonObject  = null;
                for (int i = 0 ; i &lt; response.length(); i++ ) {
                    try {
                        jsonObject = response.getJSONObject(i);
                        User user = new User();
                        user.setUsername(jsonObject.getString(&quot;username&quot;));
                        lstUser.add(user);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                setuprecyclerview(lstUser);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });


        requestQueue = Volley.newRequestQueue(DashBoardActivity.this);
        requestQueue.add(request) ;
    }

答案1

得分: 0

lstUser中的值每次都会增加一倍,因为您每次都在lstUser中添加新的值,但是您没有从该数组中删除旧的值。

因此,在将User添加到lstUser之前,要先删除数组中已有的旧值。如下所示:

public void onResponse(JSONArray response) {
    JSONObject jsonObject = null;

    lstUser.clear(); // 在此处删除旧值,这样在新列表中只会保留最新的值。

    for (int i = 0; i < response.length(); i++) {
        try {
            jsonObject = response.getJSONObject(i);
            User user = new User();
            user.setUsername(jsonObject.getString("username"));
            lstUser.add(user);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    setuprecyclerview(lstUser);
}
英文:

value in lstUser gets double every time because you are adding new value in lstUser every time, but you are not removing old value from that array.

so before adding User in lstUser, remove old value available in that array. As :

   public void onResponse(JSONArray response) {
        JSONObject jsonObject  = null;

        lstUser.clear(); // Here remove old value, so in new list you have only latest values.

        for (int i = 0 ; i &lt; response.length(); i++ ) {
            try {
                jsonObject = response.getJSONObject(i);
                User user = new User();
                user.setUsername(jsonObject.getString(&quot;username&quot;));
                lstUser.add(user);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        setuprecyclerview(lstUser);
    }

huangapple
  • 本文由 发表于 2020年5月3日 21:16:09
  • 转载请务必保留本文链接:https://java.coder-hub.com/61575060.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定