Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ArrayList<;Obj>;存储空对象?_Android_Android Fragments_Arraylist_Nullpointerexception_Parcelable - Fatal编程技术网

Android ArrayList<;Obj>;存储空对象?

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) {

我试图提取一些JSON数据,解析它并将其作为参数发送,以便在显示信息的片段中打开这些数据

当在片段中接收bundle对象时,我得到一个空指针异常

在我看来,试图追溯错误时,ArrayList存储的是空对象,因此当将该数组传递给片段时,试图用空值替换实例

这就是我在entry=bundle.getParcelableArrayList(“entry”);中得到错误的地方:

这就是我将对象添加到数组的方式:

            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");
如果服务器的响应为空,则忽略该值

同样的方法使用String
n=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());