如何在另一个类中使用mQueue然后是MainActivity Android?

时间:2016-10-17 17:41:06

标签: java android

我正在尝试从另一个类中的Volley访问mQueue,然后是MainActivity.java。

MainActivity.java

MainActivity.java中,我创建RequestQueue实例并初始化队列:

private RequestQueue mQueue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Init queue ( getRequestQueue )
    mQueue = MyRequestQueue.getInstance(this.getApplicationContext()).getRequestQueue();

    getLights();
    initListView();
}

MainActivity.java中的方法getLight()将请求添加到队列中:

String url = APIkey + "/lights";
final MyJSONObject request = new MyJSONObject(Request.Method.GET, url, new JSONObject(), this, this);

// Executing the queue
mQueue.add(request);

RequestHandler.java

我将put请求移动到一个名为RequestHandler.java的单独类中。

public class RequestHandler implements Response.Listener<JSONObject>, Response.ErrorListener {

    RequestQueue mQueue;

    public void setLightOn(String lightId, boolean lightsOn){

        String url = APIkey + "/lights/" + lightId + "/state";
        JSONObject json = new JSONObject();

        try {
            json.put("on", lightsOn);
        }
        catch (Exception e) {
            // Error handling
            Log.i("Value was not found", "");
        }

        final MyJSONObject request = new MyJSONObject(Request.Method.PUT, url, json, this, this);

        request.setTag("ONOF");
        mQueue.add(request);
    }

    // Volley error and response handler
    @Override
    public void onErrorResponse(VolleyError error) {
        System.out.println("ERROR REQUEST HANDLER");
    }

    @Override
    public void onResponse(JSONObject response) {
        System.out.println("SUCCEED REQUEST HANDLER");
    }

}

错误

上面的代码会给我一个错误和我的Android应用程序崩溃。 mQueue为null的错误;

  

java.lang.RuntimeException:无法启动活动.DetailActivity}:   java.lang.NullPointerException:尝试调用虚方法   “com.android.volley.Request   com.android.volley.RequestQueue.add(com.android.volley.Request)'on a   null对象引用

在此之前,我将这些方法也存放在MainActivity中,但希望将其与我的MainActivity分开。

我错了,忘了,所以mQueue不再是null了? 如果还有任何问题,请告诉我。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题归结为Java范围。您的Activity定义了mQueue并对其进行了跟踪,但您已在mQueue类内创建了一个受类保护的成员字段RequestHandler。但是,RequestHandler没有一个以RequestQueue作为参数的构造函数。

或者,如果您的RequestHandlerActivity的内部类,那么您不必定义mQueue成员字段,因为内部类可以访问父类& #39;会员领域。