2016-06-12 3 views
0

나는 발리를 통해 간단한 HTTP 쿼리를 실행하기 위해 노력하고있어이 코드에서 onCreate()에서 기본 안드로이드 MainActivity에 완벽하게 잘 작동에 :발리 예 오류하지 MainActivity

JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, (String)null, new Response.Listener<JSONObject>() 
{ 
    @Override 
    public void onResponse(JSONObject response) { 
     // the response is already constructed as a JSONObject! 
     try { 
      //     response = response.getJSONObject("results"); 
      String success = response.getString("success"), 
        status = response.getString("status"); 

      if(status.equals("1")) 
      { 
       GlobalVar.armedStatus = 1; 
      } 
      else if(status.equals("0")) 
      { 
       GlobalVar.armedStatus = 0; 
      } 

      System.out.println("Success: "+success+"\nStatus: "+status); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 


    } 
}, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     error.printStackTrace(); 
    } 
}); 
// RequestQueue queue = Volley.newRequestQueue(jsonRequest); 
    Volley.newRequestQueue(this).add(jsonRequest); 

나는이 코드를 실행하면 별도의 클래스이지만, 마지막 줄에 오류가 있습니다.

Volley.newRequestQueue(this).add(jsonRequest); 

newRequestQueue에 오류가 메소드 본문을 누락 "되는 기호 'newRequestQueue'와 add(jsonRequest);에 오류를 확인할 수 없습니다", 또는 추상을 선언합니다. "

는 어떤 도움을 주시면 감사하겠습니다

, 그것은 확실히 작동하지 이유 액티비티에는 있지만 클래스 파일에는 없습니다 ... 이유는 onCreate()이지만 다른 클래스에 유지할 수있는 방법이 있다고 확신합니다.

답변

4

왜냐하면 라인에 있기 때문입니다 :

Volley.newRequestQueue(this).add(jsonRequest); 

newRequestQueue()에 입력 한 this은 Android 컨텍스트 여야합니다. 액티비티에서 호출 할 때 this은 컨텍스트 유형 인 활동을 나타냅니다. 자신의 클래스에서 호출 할 때 컨텍스트가 아닌 해당 클래스를 참조합니다.

당신은 몇 가지 다른 옵션이 있습니다 개체에 대한 생성자 매개 변수로

추가 컨텍스트를

당신이 클래스의 인스턴스를 만들 때 당신이에 통과해야 있도록 당신은 그것을 할 수 있습니다 당신이 붙잡고있는 상황.

public class MyClass { 

    private Context context; 

    public MyClass(Context context) { 
     this.context = context; 
    } 

    public void doVolleyRequest() { 

     //... 
     Volley.newRequestQueue(context).add(jsonRequest); 
    } 

} 

이 좋아 당신이 당신의 활동에서 수업을 할 때 그런 다음 인스턴스를해야 할 것입니다 : 당신이 발리를 호출 할 때이 다음 사용됩니다

MyClass myClass = new MyClass(this); 

가 응용 프로그램 컨텍스트에 대한 정적 참조가

응용 프로그램 클래스에서 액세스 할 수있는 응용 프로그램 컨텍스트에 대한 정적 참조를 가질 수 있습니다. 당신이 발리를 사용하는 클래스에서 다음

public class App extends Application { 

    private static Context context; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
    } 

    public static Context getContext() { 
     return context; 
    } 
} 

:

Volley.newRequestQueue(App.getContext()).add(jsonRequest); 

이 앱 와이드 RequestQueue 대신

설정할 수를 가지고 당신의 응용 프로그램 클래스에서이 작업을 수행하려면 같은 것을 가지고 Application 클래스에 요청 큐를 추가하고 모든 요청을 다음에 추가하십시오.

다음 클래스에 :

App.getRequestQueue().add(jsonRequest);