私は、Volleyから別のクラスのMainActivity.javaでmQueueにアクセスしようとしています。 MainActivity.java
でMainActivity Androidの別のクラスでmQueueを使用するには?
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");
}
}
ERRORコードの上
は私に私のAndroidアプリケーションのエラーやクラッシュが得られます。 mQueueがnullであるというエラー。
java.lang.RuntimeException:活性.DetailActivityを開始できません} java.lang.NullPointerExceptionが: 「com.android.volley.Request com.android.volley.RequestQueueを仮想メソッドを呼び出す試み。この前 nullオブジェクト参照
に「(com.android.volley.Request)を追加私は、これらの方法はまた、MainActivity
に住んでいたが、それは私のMainActivity
は別に持っていると思います。
何が間違っていますか?忘れてしまいます。だから、mQueueはもはやnullではありませんか? ご不明な点がございましたら、お知らせください。
ありがとうございます。
あなたが正しいことを理解したら、すでにRequestHandlerクラスにmQueueを宣言する必要がありますか? – Caspert
いいえ、あなたの 'Activity'の内部クラスとして' RequestHandler'を持っているかどうかによって決まります。そうした場合は、 'RequestHandler'クラスの' RequestQueue mQueue'行を削除してください。そうではなく、 'RequestHandler'クラスがあなたの' Activity'の外にあるスタンドアロンクラスである場合、 'RequestQueue'パラメータを持つコンストラクタを作成する必要があります。次に' mQueue'をコンストラクタ。 –