2016-10-17 5 views
0

私は、Volleyから別のクラスのMainActivity.javaでmQueueにアクセスしようとしています。 MainActivity.javaMainActivity 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ではありませんか? ご不明な点がございましたら、お知らせください。

ありがとうございます。

答えて

0

問題はJavaスコープにまで下がります。 ActivitymQueueを定義し、それを追跡しますが、RequestHandlerクラスの内部にクラス保護されたメンバーフィールドmQueueを作成しました。ただし、RequestHandlerには、パラメータとしてRequestQueueを取るコンストラクタはありません。

また、RequestHandlerActivityの内部クラスである場合、内部クラスが親クラスのメンバーフィールドにアクセスできるため、mQueueメンバーフィールドを定義する必要はありません。

+0

あなたが正しいことを理解したら、すでにRequestHandlerクラスにmQueueを宣言する必要がありますか? – Caspert

+0

いいえ、あなたの 'Activity'の内部クラスとして' RequestHandler'を持っているかどうかによって決まります。そうした場合は、 'RequestHandler'クラスの' RequestQueue mQueue'行を削除してください。そうではなく、 'RequestHandler'クラスがあなたの' Activity'の外にあるスタンドアロンクラスである場合、 'RequestQueue'パラメータを持つコンストラクタを作成する必要があります。次に' mQueue'をコンストラクタ。 –

関連する問題