2017-11-27 20 views
0

이 오버라이드 된 메소드 내에서 클래스 변수를 설정하려고합니다. 나는 이것이 다른 스레드에서 실행된다는 것을 알고 있습니다. 거기서 출력하면 값을 얻습니다. 아래의 방법으로 출력하면 값은 null입니다.Android의 Response.Listener의 onResponse 메소드 내에서 클래스 변수를 업데이트하려고 시도했습니다.

이 클래스 변수를 올바른 방법으로 설정하는 방법은 무엇입니까? 그 인터페이스를 구현))

public interface yourInterface 
{ 
    public void updateMyVariable(String variable); 
} 

2)

1 즉, 어디서든 사용할 수있다 (당신의 변수로 매개 변수를 사용하여 자신 만의 인터페이스를 만들기 :

public class MainActivity extends AppCompatActivity { 

    private String[] mRestTitles = new String[2]; 

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         JSONObject rootObject = response.getJSONObject("_embedded"); 
         JSONArray users = rootObject.getJSONArray("users"); 

         for (int i = 0; i < users.length(); i++) { 

          JSONObject o = users.getJSONObject(i); 
          mRestTitles[i] = o.getString("firstName"); 

          Log.d("item", mRestTitles[i]); 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.d("erro", error.toString()); 
       } 
      } 

    ); 

    queue.add(request); 


public ArrayList<Entry> generateEntryList(){ 

    String[] entryTitles = getResources().getStringArray(R.array.entry_names); 
    String[] entryDescriptions = getResources().getStringArray(R.array.entry_description); 

    ArrayList<Entry> entries = new ArrayList<>(); 

    for(int i = 0; i < mRestTitles.length; i++){ 
     // mRestTitles is here null 
     Log.d("foo", mRestTitles[i]); 
     entries.add(new Entry(mRestTitles[i], entryDescriptions[i])); 
    } 

    return entries; 
} 

답변

0

은이 상황을 처리하려면 다음 단계를 수행 변수의 값을 어디에서 받고 싶습니까? 이 같은 variale의 값을 얻을로

@override 
public void updateMyVariable(String variable) 
{ 
    //get the value here 
} 

3)로 즉시 onResponse 방법에서 인터페이스를 호출합니다.

yourInterface.updateMyVariable(VariableToBeUsed); 

확실히 yourInterface 객체가 기능을 대체/구현되어 활동의 맥락에 대한 참조를이 있는지 확인하십시오.