Android Cardview 和 Recycler 与 Volley 发生错误

2023-12-09

我有一些代码可以使用 Volley 将 JSON 数据解析为cardview 和recycler。我想将 json 数据显示到我的片段中。我收到错误,但我不知道是什么原因造成的。也许任何人都可以帮助我。

这是我的片段。

public class HomeFragment extends android.support.v4.app.Fragment {
  private static final String TAG = HomeActivity.class.getSimpleName();
  private ArrayList<ListItem> listItems;

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);

    ParseData();

    RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler_list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setAdapter(new ListCardAdapter(listItems, R.layout.report_list_item));

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2));
    recyclerView.setItemAnimator(new DefaultItemAnimator());


    // Inflate the layout for this fragment
    return rootView;
}

private void ParseData(){
    JsonArrayRequest listReq = new JsonArrayRequest(AppConfig.URL_LIST,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            ListItem listItem = new ListItem();
                            listItem.setDesc(obj.getString("desc"));

                            String image = obj.isNull("image") ? null : obj.getString("image");
                            listItem.setImge(image);

                            // adding movie to movies array
                            listItems.add(listItem);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }


                   ListCardAdapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
        }
    });

    // Adding request to request queue
    VolleyController.getInstance().addToRequestQueue(listReq);
}

这是我的适配器。

public class ListCardAdapter extends RecyclerView.Adapter<ListCardAdapter.ViewHolder> {
private final String TAG = this.getClass().getSimpleName();
private List<TerbaruItem> terbaruItems;
private int itemLayout;
ImageLoader imageLoader = VolleyController.getInstance().getImageLoader();

public ListCardAdapter(List<ListItem> data, int itemLayout){
    listItems = data;
    this.itemLayout = itemLayout;
}

public static class ViewHolder extends RecyclerView.ViewHolder implements AdapterView.OnClickListener {

    public ReportImageView image;
    public TextView desc;

    public ViewHolder(View itemView) {

        super(itemView);

        itemView.setOnClickListener(this);
        image = (ReportImageView) itemView.findViewById(R.id.image);
        desc = (TextView) itemView.findViewById(R.id.desc);
    }

    @Override
    public void onClick(View view) {
        Toast.makeText(view.getContext(), "OnItemClick :D", Toast.LENGTH_SHORT).show();
    }

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup  parent, int i) {

    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;

}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

    ListItem listItem = listItems.get(position);
    viewHolder.desc.setText(listItem.getDesc());


    // Feed image
    if (listItem.getImge() != null) {
        viewHolder.image.setImageUrl(listItem.getImge(), imageLoader);
        viewHolder.image.setVisibility(View.VISIBLE);
        viewHolder.image
                .setResponseObserver(new LaporanImageView.ResponseObserver() {
                    @Override
                    public void onError() {

                    }

                    @Override
                    public void onSuccess() {

                    }
                });
    } else {
        viewHolder.image.setVisibility(View.GONE);
    }


    viewHolder.itemView.setTag(terbaruItem);
}


@Override
public int getItemCount() {
    return listItems.size();
}
}

当我运行应用程序时出现此错误。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.report/com.company.report.activity.HomeActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
        at android.app.ActivityThread.access$600(ActivityThread.java:123)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4424)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at id.co.aascenter.suarawarga.activity.HomeFragment.onCreateView(HomeFragment.java:126)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
        at android.app.Activity.performStart(Activity.java:4475)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
        at android.app.ActivityThread.access$600(ActivityThread.java:123)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4424)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
        at dalvik.system.NativeStart.main(Native Method)

你可以参考我下面的示例代码。我已经测试过。

public class RecycleCardActivityFragment extends Fragment {

    private final List<Person> mPersonList = new ArrayList<>();

    public RecycleCardActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_recycle_card, container, false);

        Context context = getActivity();

        RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycleView);
        recyclerView.setHasFixedSize(true);

        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        recyclerView.setLayoutManager(layoutManager);

        final RVAdapter rvAdapter = new RVAdapter(mPersonList);
        recyclerView.setAdapter(rvAdapter);

        RequestQueue requestQueue = Volley.newRequestQueue(context);
        String url = "http://192.16.1.100/api/persons";

        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {
                    if (response.length() > 0) {
                        mPersonList.clear();
                        for (int i = 0; i < response.length(); i++) {
                            JSONObject jsonObject = response.getJSONObject(i);
                            Person person = new Person();
                            if (!jsonObject.isNull("name")) {
                                person.name = jsonObject.getString("name");
                            }
                            if (!jsonObject.isNull("age")) {
                                person.age = jsonObject.getInt("age");
                            }
                            mPersonList.add(i, person);
                        }
                        rvAdapter.notifyDataSetChanged();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VOLLEY", error.toString());
            }
        });

        requestQueue.add(jsonArrayRequest);

        return view;
    }
}

有关Person类和RVAdapter同学们,请看我对以下问题的回答

如何使用 volley 将数据(json)加载到回收器视图中

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Cardview 和 Recycler 与 Volley 发生错误 的相关文章

随机推荐

  • dplyr 中的 mutate_each / summarise_each:如何选择某些列并为变异列提供新名称?

    我有点困惑dplyr verb mutate each 使用基本的方法非常简单mutate将一列数据转换为 z 分数 并在 data frame 中创建一个新列 此处名称为z score data newDF lt DF gt select
  • 如何在机器人框架中的小黄瓜式测试中指定句子中间的参数?

    使用 Robot Framework 我打算使用 Gherkin 风格的测试 因为它是 BDD ATDD 的通用语言 我可以指定这样的测试 Test Cases New alert Given there were no alerts so
  • C# 中标准 I/O 的非阻塞读取

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想要一个来自控制台的非阻塞读取功能 我如何用 C 编写它 理查德 达顿有一个解
  • Android 将图像拖放到屏幕上?

    我正在帮助项目用户将图像从一个位置移动到屏幕上的另一个位置 我已经编写了一个示例代码来移动图像 但这里的问题是 如果我移动一个图像 相邻图像也会开始移动 这是示例代码 任何一个想法 主程序 java public class MainAct
  • 如何将 h5 文件转换为 tflite 文件?

    我正在尝试在 Android 上运行车牌检测 所以首先我找到这个教程 https medium com quangnhatnguyenle detect and recognize vehicles license plate with m
  • 编写分类栅格及其符号系统

    我已经对很多栅格进行了分类 我想用我定义的符号系统来编写它们 这是我正在处理的栅格类型 library raster library rasterVis r lt raster nrow 10 ncol 10 r 1 r 51 100 3
  • 如何仅打印(调整后的)回归模型的 R 平方?

    我是 R 初学者 我有一个关于空气污染的数据集 这些列是站点 测量浓度和可能影响浓度的 80 个变量 v1 v80 我想用我自己的代码创建一个基于 R squared adj 的前向逐步回归模型 所以我不想使用诸如 step 或 regsu
  • 将 char 指针从 C# 传递到 C++ [重复]

    这个问题在这里已经有答案了 可能的重复 将 char 指针从 C 传递到 C 函数 我有这样的问题 我有一个具有以下签名的 C 函数 int myfunction char Buffer int rotation 缓冲区参数必须用空格字符
  • Angular2 异常:尝试检测脱水检测器上的变化

    我遇到这个错误EXCEPTION Attempt to detect changes on a dehydrated detector 并在阅读了一些在线页面后 我不太清楚如何解决它或者因为它是 https github com angul
  • 将句子拆分为单词

    例如我有这样的句子 text word word w d word 我需要这样的数组 Array 0 gt word 1 gt word 2 gt w d 3 gt word 我对正则表达式很陌生 这是我尝试过的 function divi
  • 对象中所有属性的总和

    我有以下对象 speed 299 equipment 49 teleabb 49 additional 50 optional 299 我想将所有这些值相加并打印出来 如何对属性值求和 使用迭代对象属性for var in Use pars
  • EJB3.0 将句柄序列化为 Stateful Bean

    我正在尝试保留有状态 EJB3 0 bean 的远程句柄 该bean的接口定义为 Remote public interface Hello extends Serializable Handle getHandle void sayHel
  • 如何在 OpenCV 中进行逆 DFT [重复]

    这个问题在这里已经有答案了 我正在尝试在 C 中使用 OpenCV 实现逆 DFT 我在 docs opencv org 下载了完整的 dft 示例 只需调整几行即可反转 我的DFT代码是这样的 Mat DFT const char fil
  • iOS 8:如果没有情节提要,自动旋转将无法工作

    所以我试图启动一个没有故事板的项目 但我似乎无法弄清楚为什么 UIWindow 没有将自动旋转命令传递给根视图控制器 有了故事板 自动旋转就可以了 如果我以编程方式创建窗口 自动旋转将不起作用 这是我在应用程序委托中实例化窗口的方式 win
  • 如何通过 Java 使用 XPath 和 Selenium WebDriver 单击 SVG 元素

    我有一个SVG具有一些矩形元素的对象 使用geckodriver 我正在尝试单击主要内容之一SVG目的 但是 使用 xpath checker 我无法检测到正确的xpath对于相同的 到目前为止 我能够深入了解xpath upto id a
  • 角度 ui.bootstrap.carousel 从 $scope 调用 next()/prev()

    如何从幻灯片访问轮播的 next prev 方法 我正在尝试连接到 hm swipe left right 但我似乎没有正确的 scope
  • 为什么使用 MSXML v3.0 可以解析 XML 文档,而 MSXML v6.0 却不行

    因此 我正在开发一个项目 根据每个来源的特征 使用许多不同的方法从互联网上的许多不同来源抓取和收集数据 最近添加的是一个网络API返回以下内容的调用XML作为回应
  • 当我选择文本字段时,键盘会在其上方移动

    当我选择一个文本字段时 将显示键盘 但键盘隐藏我选择的文本字段 有人有解决办法吗 Scaffold resizeToAvoidBottomInset true body SingleChildScrollView child Contain
  • 仅针对聚合根更新 RESTful 资源

    通常我使用以下资源 URI 方案来构建 RESTful API POST products PATCH products id GET products GET products id DELETE products id 产品还可能含有产
  • Android Cardview 和 Recycler 与 Volley 发生错误

    我有一些代码可以使用 Volley 将 JSON 数据解析为cardview 和recycler 我想将 json 数据显示到我的片段中 我收到错误 但我不知道是什么原因造成的 也许任何人都可以帮助我 这是我的片段 public class