我正在尝试从另一个类中的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了? 如果还有任何问题,请告诉我。
提前谢谢。
答案 0 :(得分:0)
问题归结为Java范围。您的Activity
定义了mQueue
并对其进行了跟踪,但您已在mQueue
类内创建了一个受类保护的成员字段RequestHandler
。但是,RequestHandler
没有一个以RequestQueue
作为参数的构造函数。
或者,如果您的RequestHandler
是Activity
的内部类,那么您不必定义mQueue
成员字段,因为内部类可以访问父类& #39;会员领域。