【问题标题】:Strange NullPointException [duplicate]奇怪的 NullPointErexception [重复]
【发布时间】:2018-05-29 02:10:16
【问题描述】:

我正在尝试使用 recycler-view ans card-view 显示 mysql 数据库中的数据,但我遇到了以下错误消息:

java.lang.NullPointerException:尝试调用接口方法 'int java.util.List.size()' 在空对象引用上

一切似乎都可以正常工作,因为我能够在循环中显示在 (Log) 上检索到的数据,并且当我尝试在我的 List data_list 上添加数据时,一切都很好,因为我能够知道我的 data_list 返回的行数

Log.e("number of lines return", String.valueOf(data_list.size()));

但是当我尝试访问自定义适配器上的 data_list 时:

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

它警告我我无法访问 my_data,因为它为空。

从我的数据库中检索数据的代码部分:

private void load_data_from_server(final int id) {
    //Log.e("iddddsss", String.valueOf(id));
    AsyncTask<Integer,Void,Void> task =new AsyncTask<Integer, Void, Void>(){

        @Override
        protected Void doInBackground(Integer... integers) {

            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()

                    .url("http://www.unhabitatrdcongo.org/Recycler-android-mySQL/index2.php?id="+id)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                JSONArray array = new JSONArray(response.body().string());



                for (int i=0; i<array.length(); i++){
                    JSONObject object = array.getJSONObject(i);

                    Integer idd = object.getInt("id");
                    String des = object.getString("description").toString();
                    String im =object.getString("image").toString();

                    MyData data = new MyData(idd, des, im);

                    Log.e("errr", data.getDescription().toString());
                    data_list.add(data);


                }

        Log.e("number of lines read", String.valueOf(data_list.size()));

            } catch (IOException e) {
                e.printStackTrace();
                Log.e("erreur IO EXCEPTION", e.toString());
            } catch (JSONException e) {
                System.out.print("End of content");
                Log.e("erreur JSON",e.toString());
            }
            return null;
        }

【问题讨论】:

  • 那么您是否将my_data 设置在任何地方?我看不到它。在那种情况下,为什么它是 null 会让你感到惊讶?
  • 显示更多代码!

标签: java android nullpointerexception android-recyclerview android-cardview


【解决方案1】:

一般情况下,执行getItemCount()时my_data尚未赋值。该方法在适配器构造中调用 this.my_data = data_list;

【讨论】:

    【解决方案2】:

    该类得到的List&lt;MyData&gt; data_list很可能是空的,然后,当this.my_data = data_list;你正在这样做this.my_data = null;

    试着检查一下。

    【讨论】:

    • 公共类 CustomAdapter 扩展 RecyclerView.Adapter { 私有上下文上下文;私有列表 my_data;公共CustomAdapter(上下文上下文,列表 data_list){ this.context = context; this.my_data = 数据列表; }
    • 同样,CustomAdapter 作为参数接收的列表似乎为空。您是否尝试过调试您的项目?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多