Java 无法访问实例变量

Java 无法访问实例变量,java,android,okhttp,Java,Android,Okhttp,我有一个问题,无法访问mGirlsLisl变量。 我认为这是一个问题,在尝试捕捉 代码运行良好,但是onCreate方法无法访问mGirlsList变量。 请检查代码 公共类MainActivity扩展了AppCompatActivity{ private ArrayList<Girl> mGirlsList; private GirlClient girlClient; @Override protected void onCreate(Bundle savedInstanceS

我有一个问题,无法访问
mGirlsLisl
变量。 我认为这是一个问题,在尝试捕捉

代码运行良好,但是
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();
            }

        }
    });
}
私有数组列表mGirlsList;
私人GirlClient GirlClient;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
fetchGirls(“girls.json”);
Log.i(“Log”,String.valueOf(mGirlsList.size());//错误无法获取大小
}
私有void fetchGirls(字符串查询){
girlClient=新的girlClient();
字符串url=girlClient.getApiUrl(查询);
OkHttpClient=新的OkHttpClient();
Request Request=newrequest.Builder().url(url.build();
Call Call=client.newCall(请求);
call.enqueue(新回调(){
@凌驾
公共void onFailure(调用调用,IOE异常){
e、 printStackTrace();
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
String jsonData=response.body().String();
试一试{
mGirlsList=girlClient.getGirlsListFromJson(jsonData);
Log.i(“Log”,String.valueOf(mGirlsList.size());//5确定
}捕获(JSONException e){
e、 printStackTrace();
}
}
});
}

您没有在任何地方初始化
mGirlsList
实例变量,而是尝试访问
OnCreate
方法中的大小。与
OnResponse
方法中的大小不同,在该方法中,您执行
mGirlsList=girlClient.getGirlsListFromJson(jsonData);


因此,请确保您在
OnCreate
方法中的某个地方初始化了
mGirlsList

尝试访问它时会出现什么错误?NullPointerException?方法
onResponse()
回调
将在从服务器获取响应后异步运行。在
fetchGirls
中,您创建了类
回调
,但没有调用
onResponse
。因此
mGirlsList
未初始化yet@ShamasS是的,它是由java.lang引起的。NullPointerException@Suzy21我把答案贴了好几天天以前。如果它解决了问题,请接受答案。