【问题标题】:Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference In json [duplicate]尝试在 json 中的空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”[重复]
【发布时间】:2018-06-12 03:41:44
【问题描述】:

我正在尝试从 json 文件中调用 折扣价折扣价

Json 内容是。

[  
   {  
      "Menu_ID":"63",

      "Menu_name":"Who knows that he is hero? whole of product discre",
      "Price":"1800",
      "Discounted_Price":"180",
      "Discounted_Value":"13",
      "Menu_image":"upload\/images\/9489-2018-06-11.png"
   },
   {  
      "Menu_ID":"62",
      "Menu_name":"Who knows that he is hero?",
      "Price":"190",
      "Discounted_Price":"90",
      "Discounted_Value":"9",
      "Menu_image":"upload\/images\/0459-2018-06-10.png"
   }
]

我正在使用 recyclerview 来显示我的应用中的所有内容。

Fragment 我在哪里实现 recyclerview

ArrayList<Double> Discounted_Price = new ArrayList<Double>();
ArrayList<String> Discounted_Value = new ArrayList<String>();

public void PrsJsonRea(JSONArray 数组){

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

        SecondPojoListData getJsonRecAdap = new SecondPojoListData();

        JSONObject json = null;
        try {

            json = array.getJSONObject(i);

            getJsonRecAdap.setDiscPrice3(json.getString("Discounted_Price"));
            getJsonRecAdap.setDiscValue3(json.getString("Discounted_Value"));

            Menu_ID3.add(json.getLong("Menu_ID"));

            // Adding image title name in array to display on RecyclerView click event.
            Discounted_Value5.add(json.getString("Discounted_Value"));
            Discounted_Price5.add(Double.valueOf(formatData.format(json.getDouble("Discounted_Price"))));

        } catch (JSONException e) {

            e.printStackTrace();
        }
        recDataAdap.add(getJsonRecAdap);
    }

    madap2 = new FrontHorizontalListAdapter(recDataAdap,getContext());
    secondrecyclerView.setAdapter(madap2);
}

适配器类

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

    SecondPojoListData dataAdapterOBJ =  dataAdapters.get(position);

    Viewholder.discountedvalue.setText(dataAdapterOBJ.getDiscValue3());
    Viewholder.discountedprice.setText(dataAdapterOBJ.getDiscPrice3());


}

类 ViewHolder 扩展 RecyclerView.ViewHolder{

    public TextView discountedvalue, discountedprice;
    public 

    public ViewHolder(View itemView) {

        super(itemView);
        discountedprice = (TextView) itemView.findViewById(R.id.DiscountPrice);
        discountedvalue = (TextView) itemView.findViewById(R.id.DiscountValue);

        Menuprice = (TextView) itemView.findViewById(R.id.itemprice);
    }
}

xml 布局

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10sp"
        android:textColor="@color/secondary_text"
        android:maxLines="1"
        android:gravity="left|center_vertical"
        android:id="@+id/DiscountValue"
        android:padding="5dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10sp"
        android:textColor="@color/secondary_text"
        android:maxLines="1"
        android:gravity="left|center_vertical"
        android:id="@+id/DiscountPrice"
        android:padding="5dp"/>

错误信息。

06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at com.androbaron.ecommerce.adapters.FrontHorizontalListAdapter.onBindViewHolder(FrontHorizontalListAdapter.java:83)
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at com.androbaron.ecommerce.adapters.FrontHorizontalListAdapter.onBindViewHolder(FrontHorizontalListAdapter.java)
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217)
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250)
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487)
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363)
06-12 09:07:11.981 32633 32633 E   AndroidRuntime                               at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)

一切正常工作都接受折扣价折扣价

有人帮我解决这个错误吗?

【问题讨论】:

  • 您应该对您的 json 响应进行 POJO。您可以使用对象列表轻松获取 json 数组。而且很容易理解。

标签: android json android-recyclerview settext


【解决方案1】:

您的错误是 NullPointerException,因为您的 ViewHolder 中引用的 TextViews 之一为空。在创建 ViewHolder 时查看您正在膨胀的布局,看看为什么您的引用 ID 不在您绑定的 ItemView 中。

【讨论】:

    【解决方案2】:

    我通过更改布局值来解决问题。

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
    
        View viewTWO = LayoutInflater.from(parent.getContext()).inflate(R.layout.first_cardview, parent, false);
        ViewHolder rowTWO = new ViewHolder(viewTWO);
        return rowTWO;
    }
    

    谢谢大家。

    【讨论】:

      【解决方案3】:

      请键入Cast Double 到类似字符串..

      Viewholder.discountedvalue.setText(String.valueOf(dataAdapterOBJ.getDiscValue3()));
      

      【讨论】:

        【解决方案4】:

        您尝试绑定到 Recyclerview 的视图似乎配置错​​误。请仔细检查您使用的布局是否膨胀。如果您可以上传适配器类的全部内容,将会很有帮助。

        【讨论】:

        • 我通过更改布局值解决了这个问题,谢谢您的支持。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2021-07-15
        相关资源
        最近更新 更多