【问题标题】:Trying to update a class variable from within an Android's Response.Listener's `onResponse` method尝试从 Android 的 Response.Listener 的 `onResponse` 方法中更新类变量
【发布时间】:2017-11-27 20:03:52
【问题描述】:

我试图在这个被覆盖的方法中设置一个类变量。我知道这是在另一个线程中执行的。如果我从那里输出它,我会得到价值。如果我在下面的方法中输出它,值为空。

如何正确设置这个类变量?

public class MainActivity extends AppCompatActivity {

    private String[] mRestTitles = new String[2];

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONObject rootObject = response.getJSONObject("_embedded");
                        JSONArray users = rootObject.getJSONArray("users");

                        for (int i = 0; i < users.length(); i++) {

                            JSONObject o = users.getJSONObject(i);
                            mRestTitles[i] = o.getString("firstName");

                            Log.d("item", mRestTitles[i]);
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("erro", error.toString());
                }
            }

    );

    queue.add(request);


public ArrayList<Entry> generateEntryList(){

    String[] entryTitles = getResources().getStringArray(R.array.entry_names);
    String[] entryDescriptions = getResources().getStringArray(R.array.entry_description);

    ArrayList<Entry> entries = new ArrayList<>();

    for(int i = 0; i < mRestTitles.length; i++){
        // mRestTitles is here null
        Log.d("foo", mRestTitles[i]);
        entries.add(new Entry(mRestTitles[i], entryDescriptions[i]));
    }

    return entries;
}

【问题讨论】:

    标签: java android android-volley java-threads jsonresponse


    【解决方案1】:

    按照以下步骤处理这种情况:

    1) 以参数为变量创建自己的接口(必须在任何地方使用)

    public interface yourInterface
    {
        public void updateMyVariable(String variable);
    }
    

    2) 在您希望接收变量值的任何地方实现该接口。

    @override
    public void updateMyVariable(String variable)
    {
      //get the value here 
    }
    

    3) 像这样获得变量值后,立即从 onResponse 方法调用接口。

    yourInterface.updateMyVariable( VariableToBeUsed );
    

    确保您的Interface 对象具有对 实现/覆盖该功能的活动。

    【讨论】:

      猜你喜欢
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2018-12-15
      相关资源
      最近更新 更多