2017-11-27 13 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オブジェクトが関数をオーバーライド/実装され アクティビティのコンテキストへの参照を持っていることを確認してください。

関連する問題