2016-04-13 155 views
0

我有一个问题,我不能访问mGirlsLisl变量。 我认为这是try catch中的一个问题。无法访问实例变量

代码运行良好,但onCreate方法无法访问mGirlsList变量。 请检查代码 公共类MainActivity扩展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

尝试访问它时会出现什么错误?空指针异常? –

+1

方法''Callback'的onResponse()'将从服务器获得响应后异步运行。在'fetchGirls'中,你创建了类'Callback',但是没有调用'onResponse'。所以'mGirlsList'尚未初始化 –

+0

@ShamasS是它的一个引起:java.lang.NullPointerException – Suzy21

回答

1

那么你还没有在任何地方初始化mGirlsList实例变量,但试图访问OnCreate方法内的大小。不像OnResponse方法那里你做mGirlsList = girlClient.getGirlsListFromJson(jsonData);

因此,请确保您在OnCreate方法内的某个位置初始化mGirlsList