2017-11-27 2 views
0

Ich versuche, eine Klassenvariable innerhalb dieser überschriebenen Methode zu setzen. Ich verstehe, dass dies in einem anderen Thread ausgeführt wird. Wenn ich es von dort aus gebe, bekomme ich den Wert. Wenn ich es in einer der folgenden Methoden ausgab, sind die Werte null.Der Versuch, eine Klassenvariable aus der Methode 'onResponse' von Response.Listener von Android zu aktualisieren

Wie wird diese Klassenvariable richtig gesetzt?

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; 
} 

Antwort

0

Führen Sie die folgenden Schritte, um diese Situation zu handhaben:

1) Erstellen Sie Ihre eigene Schnittstelle mit dem Parameter als Variable (Das war früher überall werden muss)

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

2) Implementieren Sie diese Schnittstelle wo immer Sie den Wert der Variablen erhalten möchten.

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

3) Rufen Sie die Schnittstelle von Ihrer onResponse Methode, sobald Sie die variale Wert wie diese zu erhalten.

yourInterface.updateMyVariable(VariableToBeUsed); 

Stellen Sie sicher, yourInterface Objekt den Verweis auf den Kontext der Aktivität hat, die/das Überschreiben die Funktion implementiert.

Verwandte Themen