Android ArrayList<;Obj>;存储空对象?
我试图提取一些JSON数据,解析它并将其作为参数发送,以便在显示信息的片段中打开这些数据 当在片段中接收bundle对象时,我得到一个空指针异常 在我看来,试图追溯错误时,ArrayList存储的是空对象,因此当将该数组传递给片段时,试图用空值替换实例 这就是我在entry=bundle.getParcelableArrayList(“entry”);中得到错误的地方: 这就是我将对象添加到数组的方式:Android ArrayList<;Obj>;存储空对象?,android,android-fragments,arraylist,nullpointerexception,parcelable,Android,Android Fragments,Arraylist,Nullpointerexception,Parcelable,我试图提取一些JSON数据,解析它并将其作为参数发送,以便在显示信息的片段中打开这些数据 当在片段中接收bundle对象时,我得到一个空指针异常 在我看来,试图追溯错误时,ArrayList存储的是空对象,因此当将该数组传递给片段时,试图用空值替换实例 这就是我在entry=bundle.getParcelableArrayList(“entry”);中得到错误的地方: 这就是我将对象添加到数组的方式: if (jsonStr != null) {
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
//Getting object feed
JSONObject feed = jsonObj.getJSONObject("feed");
//Getting array node
JSONArray entry = feed.getJSONArray("entry");
for (int i = 0; i < entry.length(); i++) {
JSONObject e = entry.getJSONObject(i);
JSONObject name = e.getJSONObject("im:name");
String n = name.getString("label");
JSONArray image = e.getJSONArray("im:image");
for (int y = 0; y < image.length(); y++) {
JSONObject im = image.getJSONObject(y);
ims = im.getString("label");
}
JSONObject summary = e.getJSONObject("summary");
String label = summary.getString("label");
JSONObject category = e.getJSONObject("category");
JSONObject at = category.getJSONObject("attributes");
String term = at.getString("term");
data = new Entry();
data.setCategory(term);
data.setImage(ims);
data.setName(n);
data.setSummary(label);
Log.d("hola", term);
entries.add(i, data);
//System.out.printf("das",Arrays.toString(entries));
}
if(jsonStr!=null){
试一试{
JSONObject jsonObj=新的JSONObject(jsonStr);
//获取对象提要
JSONObject feed=jsonObj.getJSONObject(“feed”);
//获取数组节点
JSONArray entry=feed.getJSONArray(“entry”);
对于(int i=0;i
将数据传递到片段:
private void callFragment(GalleryFragment galleryFragment, ArrayList<Entry> entry) {
//create parcel and add
ArrayList<Entry> e= entry;
galleryFragment= new GalleryFragment();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("Entry",e);
galleryFragment.setArguments(bundle);
Log.d("s", String.valueOf(entry));
//Initiate transaction
FragmentTransaction transaction= getSupportFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, galleryFragment, "galleryFragment");
transaction.addToBackStack(null);
transaction.commit();
}
private void callFragment(GalleryFragment GalleryFragment,ArrayList条目){
//创建地块并添加
ArrayList e=条目;
galleryFragment=新的galleryFragment();
Bundle=新Bundle();
bundle.putParcelableArrayList(“条目”,e);
galleryFragment.setArguments(bundle);
Log.d(“s”,String.valueOf(entry));
//发起交易
FragmentTransaction=getSupportFragmentManager().beginTransaction();
transaction.replace(android.R.id.content,galleryFragment,“galleryFragment”);
transaction.addToBackStack(空);
commit();
}
这是日志:
02-02 02:05:17.680 1884-1884/com.blitzar.testgrability E/AndroidRuntime﹕ 致命异常:主
进程:com.blitzar.testgrability,PID:1884
java.lang.NullPointerException
位于com.blitzar.testgrability.GalleryFragment.onCreateView(GalleryFragment.java:40)
为什么会发生这种情况?任何能让我快速摆脱困境的线索都将不胜感激,完整的项目在中,我建议您使用:
JSONObject feed = jsonObj.optJSONObject("feed");
而不是:
JSONObject feed = jsonObj.getJSONObject("feed");
如果服务器的响应为空,则忽略该值
同样的方法使用Stringn=name.optString(“标签”);
因此,您可能会从服务器获得null,由于null,它无法解析数据,也无法在
数组列表条目中存储值,特别感谢@Piyush,他指出了我在将数据从一个数组传输到另一个数组时犯的错误
e.addAll(条目);
我通过解码我以前没有意识到的数组解决了这个问题
这是生成的代码:
Bundle bundle = getArguments();
entry= bundle.getParcelableArrayList("Entry");
e=new Entry[entry.size()];
for(int x=0; x<entry.size();x++) {
e[x]=entry.get(x);
Log.d("testing",e[x].getName());
Bundle=getArguments();
条目=bundle.getParcelableArrayList(“条目”);
e=新条目[Entry.size()];
对于(int x=0;xAdd)代码,实际上是将数据传递给片段。请记住,如果要将数据从活动传递到捆绑包中的片段,则必须为片段设置参数,并在onCreateView()
方法中使用getArguments()检索数据
。这也是ArrayList e=entry;
将数据复制到另一个列表的好方法。最好使用list2.addAll(list1);
无法解析method@Juancadiyjohndiy将此Bundle Bundle=getActivity().getIntent().getExtras();
更改为Bundle Bundle=getArguments()
您在哪里找到callFragment()方法?实际上,我在将数据添加到数组之前打印数据,并且正在正确检索所有数据,所以我认为不是这样
JSONArray image = e.optJSONArray("im:image");
Bundle bundle = getArguments();
entry= bundle.getParcelableArrayList("Entry");
e=new Entry[entry.size()];
for(int x=0; x<entry.size();x++) {
e[x]=entry.get(x);
Log.d("testing",e[x].getName());