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我把答案贴了好几天天以前。如果它解决了问题,请接受答案。