2016-04-13 16 views
0

Ich habe ein Problem Ich kann nicht auf die mGirlsLisl Variable zugreifen. Ich denke, ist ein Problem im Versuch zu fangen.Zugriff auf Instanzvariable

Der Code funktioniert gut, aber onCreate Methode kann mGirlsList Variable nicht zugreifen. Bitte überprüfen Sie den Code public class MainActivity erweitert AppCompatActivity {

private ArrayList<Girl> mGirlsList; 
private GirlClient girlClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    fetchGirls("girls.json"); 
    Log.i("LOG", String.valueOf(mGirlsList.size())); // ERROR can't get size 
} 

private void fetchGirls(String query) { 

    girlClient = new GirlClient(); 
    String url = girlClient.getApiUrl(query); 
    OkHttpClient client = new OkHttpClient(); 
    Request request = new Request.Builder().url(url).build(); 
    Call call = client.newCall(request); 

    call.enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) { 
      e.printStackTrace(); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 
      String jsonData = response.body().string(); 
      try { 
       mGirlsList = girlClient.getGirlsListFromJson(jsonData); 

       Log.i("LOG", String.valueOf(mGirlsList.size())); // 5 OK 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 
} 
+0

Was ist der Fehler, den Sie bekommen, wenn Sie versuchen, darauf zuzugreifen? NullPointerException? –

+1

Methode 'onResponse()' von 'Callback' wird asynchron ausgeführt, nachdem eine Antwort vom Server erhalten wurde. In 'fetchGirls' haben Sie die Klasse' Callback' erstellt, aber nicht 'onResponse'. So 'mGirlsList' noch nicht initialisiert –

+0

@ShamasS ja es ist ein Verursacht von: java.lang.NullPointerException – Suzy21

Antwort

1

gut Sie die mGirlsList Instanz-Variable überall initialisiert haben aber versucht, die Größe innerhalb der OnCreate Methode zuzugreifen. Anders als in der OnResponse Methode, wo Sie eine mGirlsList = girlClient.getGirlsListFromJson(jsonData); tun.

So stellen Sie sicher, dass Sie die mGirlsList irgendwo innerhalb der OnCreate Methode initialisieren.

Verwandte Themen