2016-04-13 25 views
0

変数がmGirlsLislにアクセスできません。 私はtry catchの問題だと思います。インスタンス変数にアクセスできません

コードは正常に動作しますが、onCreateメソッドはアクセスできませんmGirlsList変数です。 コード パブリッククラスMainActivityをご確認ください{

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

アクセスしようとすると、どのようなエラーが発生しますか? NullPointerException? –

+1

メソッド 'callback'の' onResponse() 'はサーバからの応答を取得した後に非同期に実行されます。 'fetchGirls'ではクラス' Callback'を作成しましたが、 'onResponse'は呼び出さなかった。だから 'mGirlsList'はまだ初期化されていません –

+0

@ShamasSはい原因a原因:java.lang.NullPointerException – Suzy21

答えて

1

AppCompatActivityを拡張さてあなたはどこにでもmGirlsListインスタンス変数を初期化しますがOnCreateメソッド内のサイズにアクセスしようとしましたhaventは。 mGirlsList = girlClient.getGirlsListFromJson(jsonData);を行うOnResponseメソッドのthattとは異なります。

は、OnCreateメソッドのどこかで初期化してください。