Java ArrayList未初始化
我只是在做一些学习,不明白为什么这个ArrayList是初始化的,但不能在其内部填充的方法之外使用。有人能解释一下吗?先谢谢你 例如,如果我在方法中询问ArrayList.size(),它表明它已初始化,但在方法之外的其他地方则不会Java ArrayList未初始化,java,android,arrays,arraylist,Java,Android,Arrays,Arraylist,我只是在做一些学习,不明白为什么这个ArrayList是初始化的,但不能在其内部填充的方法之外使用。有人能解释一下吗?先谢谢你 例如,如果我在方法中询问ArrayList.size(),它表明它已初始化,但在方法之外的其他地方则不会 package com.purewowstudio.animations; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util
package com.purewowstudio.animations;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.GsonBuilder;
import com.purewowstudio.animations.extras.CustomGrid;
import com.purewowstudio.animations.models.ActorArray;
import com.purewowstudio.animations.models.ActorObject;
import java.util.ArrayList;
public class ActorList extends ActionBarActivity {
String LOG_TAG = ActorList.class.getSimpleName();
private ArrayList<ActorObject> actorObjectArrayList;
ActorArray actorArray;
GridView actorGrid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actors_list);
getActors();
if (actorObjectArrayList != null) {
ActorObject[] actors = actorObjectArrayList.toArray(new ActorObject[actorObjectArrayList.size()]);
String actorsNames[] = new String[actorObjectArrayList.size()];
String actorsImages[] = new String[actorObjectArrayList.size()];
for (int i = 0; i < actorObjectArrayList.size(); i++) {
actorsNames[i] = actors[i].getName();
actorsImages[i] = actors[i].getImage();
}
CustomGrid adapter = new CustomGrid(ActorList.this, actorsNames, actorsImages);
actorGrid = (GridView) findViewById(R.id.grid);
actorGrid.setAdapter(adapter);
actorGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//Toast.makeText(ActorList.this, "You Clicked at " + actorsNames[+position], Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.animation_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void getActors(){
String url ="http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors";
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
actorArray = new GsonBuilder().create().fromJson(response, ActorArray.class);
actorObjectArrayList = actorArray.getActors();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.v(LOG_TAG, "Volley Error");
}
});
queue.add(stringRequest);
}
}
package com.purewowstudio.animations;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.GridView;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入com.google.gson.GsonBuilder;
导入com.purewowstudio.animations.extras.CustomGrid;
导入com.purewowstudio.animations.models.ActorArray;
导入com.purewowstudio.animations.models.ActorObject;
导入java.util.ArrayList;
公共类ActorList扩展了ActionBarActivity{
字符串LOG_TAG=ActorList.class.getSimpleName();
私有ArrayList actorObjectArrayList;
阿克特拉雷;
网格视图actorGrid;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.actors\u列表);
getActors();
if(actorObjectArrayList!=null){
ActorObject[]actors=actorObjectArrayList.toArray(新的actorObjectArrayList.size());
String actorsNames[]=新字符串[actorObjectArrayList.size()];
String ActorImage[]=新字符串[actorObjectArrayList.size()];
对于(int i=0;i
在其他方法中无法访问用于初始化arraylist的内容的原因很简单。它是OnCreate范围内的本地数据。您应该定义类的构造函数并在那里初始化arraylist。然后在方法中,可以添加需要添加的数据。当您在arraylist中查找数据时,它将包含您要查找的所有内容。在其他方法中无法访问用于初始化arraylist的内容的原因很简单。它是OnCreate范围内的本地数据。您应该定义类的构造函数并在那里初始化arraylist。然后在方法中,可以添加需要添加的数据。当您在arraylist中查找数据时,它将包含您要查找的所有数据。如果它是方法的本地数据,那么它就是方法的本地数据,这就是Java的工作方式(我认为是大多数语言)。您的getActors
方法是异步的。当您调用actorObjectArrayList!=null
,它还没有初始化,因为public void onResponse(String response)
将来会被调用。我想可能是这样的,所以我把onCreate中的所有内容都添加到它自己的方法中,然后我要求该方法在10秒内启动,仍然不起作用?截击的时间是什么样的(我第一次这样做)。我知道服务器响应将有一个延迟。您可以设置一个超时吗?在此之后,如果您的数据结构中没有数据,您只需再次调用getActors或停止流,因为arraylist为空?我现在将尝试此操作。仅出于学习目的,您下面提供的答案现在适合这种情况吗?如果它是方法的局部,那么它就是方法的局部,这就是Java的工作方式(我认为是大多数语言)。您的getActors
方法是异步的。当您调用actorObjectArrayList!=null
,它还没有初始化,因为public void onResponse(String response)
将来会被调用。我想可能是这样的,所以我把onCreate中的所有内容都添加到它自己的方法中,然后我要求该方法在10秒内启动,仍然不起作用?截击的时间是什么样的(我第一次工作时)