Android studio访问变量内部类

问题描述 投票:1回答:2

如何在类onResponse之外访问字符串值“data”。总是我使用Toast外部类响应显示为null。

String data; 

JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
              @Override
              public void onResponse(JSONObject response) {
                   try {

                     data = response.getString("name"));

                       } catch (JSONException e) {
                             e.printStackTrace();
                   }
             }
             }, new Response.ErrorListener() {
             @Override
             public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), error.toString(),Toast.LENGTH_SHORT).show();
                    }
                });
                RequestQueue queue = Volley.newRequestQueue(this);
                queue.add(objectRequest);
}

Toast.makeText(getApplicationContext(),“Display:”+ data,Toast.LENGTH_SHORT).show();

android android-studio
2个回答
0
投票

JsonObjectRequest,我假设是一个凌空请求是一个异步任务。因此它将运行后台线程和UI线程上的代码运行为结束。这就是data变量为空的原因。

Volley结果返回主线程上的回调,因此您可以直接显示toast或在回调方法中执行Update UI。

 JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
               String data = response.getString("name"));
                Toast.makeText(getApplicationContext(), "Display: " + data,Toast.LENGTH_SHORT).show();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(), error.toString(),Toast.LENGTH_SHORT).show();
        }
    });

注意: - 如果你想先前定义变量data那么它必须是实例变量(类级别)。因为你不能在内部类中使用非最终局部变量,即Response.Listener


1
投票

您可能在错误的时间访问“数据”,尝试在设置后直接显示Toast,如果它在那里显示为null,则数据确实为空。 (>和<显示一个空字符串,如果它是空的)。

Toast.makeText(getApplicationContext(), ">" + data+"<",Toast.LENGTH_SHORT).show();
© www.soinside.com 2019 - 2024. All rights reserved.