【问题标题】:How to access the variable of a parameter when creating an object inside a method?在方法内创建对象时如何访问参数的变量?
【发布时间】:2017-06-17 00:28:42
【问题描述】:
 public class responseListener implements  Response.Listener<JSONObject>{
        public String status;
        @Override
        public void onResponse(JSONObject response) {
            try {

                status = response.getString("status");
                Log.d("Inside onResponse() ", status);

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

    private String getImageStatus(String url){
        responseListener response_listener = new responseListener();

        JsonObjectRequest jsonRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, response_listener, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                });



        String status=response_listener.status;
        Volley.newRequestQueue(MainActivity.this).add(jsonRequest);
        Log.d("In getImageStatus():", status);
        return status;

    }

Logcat 屏幕:

06-17 10:07:57.231 15799-15849/com.example.user.streetviewman E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                            Process: com.example.user.streetviewman, PID: 15799
                                                                            java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                                at android.os.AsyncTask$3.done(AsyncTask.java:318)
                                                                                at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                                at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
                                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                                at java.lang.Thread.run(Thread.java:761)
                                                                             Caused by: java.lang.NullPointerException: println needs a message
                                                                                at android.util.Log.println_native(Native Method)
                                                                                at android.util.Log.d(Log.java:143)
                                                                                at com.example.user.streetviewman.MainActivity$LongOperation.getImageStatus(MainActivity.java:194)
                                                                                at com.example.user.streetviewman.MainActivity$LongOperation.doInBackground(MainActivity.java:85)
                                                                                at com.example.user.streetviewman.MainActivity$LongOperation.doInBackground(MainActivity.java:62)
                                                                                at android.os.AsyncTask$2.call(AsyncTask.java:304)
                                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
                                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                                                                at java.lang.Thread.run(Thread.java:761) 06-17 10:07:57.396 15799-15799/com.example.user.streetviewman D/yo myannn inside:: ZERO_RESULTS

Log.d("Inside onResponse()", status) 在 logcat 的最后一行返回 ZERO_RESULTS,这是我想要的响应但是 Log.d("In getImageStatus", status)返回 null 并出现错误:“java.lang.NullPointerException: println 需要一条消息”。我该怎么做才能让 Log.d("In getImageStatus",status) 返回 ZERO_RESULTS 而不是 null ?强>

所有这些方法都在扩展 AsyncTask 的类 LongOperation 中。我从 LongOperation 的 doInBackground() 方法调用 getImageStatus()

【问题讨论】:

  • 又一个...响应在 onResponse 中准备好不早(不是在从 getImageStatus 返回时)
  • +Selvin,你能帮忙吗?接下来我该怎么办?

标签: java android multithreading runtime-error


【解决方案1】:

您有两个名为“status”的字符串。改第二个的名字,可能不知道用哪个

【讨论】:

  • 谢谢,但我认为这不是问题所在。我试过你的建议,没用。
  • 你公开了第一个“状态”字符串,所以试试 String s = status;代替 String status = response_listener.status;然后在 Log.d 语句中将“status”更改为“s”
【解决方案2】:

responseListener 类中,status 变量仅在调用onResponse 时才被赋值。所以很自然它会在String status=response_listener.status 上返回一个null 值。

【讨论】:

  • 你能不能给我一个status的值不为null的方法?
  • 我建议您查看一些 Volley 示例以及如何处理它们。
猜你喜欢
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多