如何修复listview此错误尝试在空对象引用上调用虚方法android.view.view.findviewbyid(int) [英] How to fix listview this error attempt to invoke virtual method android.view.view.findviewbyid(int) on a null object reference

查看:103
本文介绍了如何修复listview此错误尝试在空对象引用上调用虚方法android.view.view.findviewbyid(int)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮助我

help me please

Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at Main3Activity.ReCount(Main3Activity.java:650)



我的ListViewAdapter




My ListViewAdapter

import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter{
    public ArrayList<HashMap<String, String>> list;
    Activity activity;
    public static final String LineID="LineID";
    public static final String ItemID="ItemID";
    public static final String LineM="LineM";
    public static final String ItemName="ItemName";
    public static final String TextQty="TextQty";
    public static final String TextSubQty="TextSubQty";
    public static final String TextPrice="TextPrice";
    public static final String Total_COLUMN="Total_COLUMN";
    public static final String SUintID="SUintID";
    public static final String UintTwoID="UintTwoID";
    public static final String UintTwoPrice="UintTwoPrice";
    public static final String Add_Units_Count="Add_Units_Count";
    public ListViewAdapter(Activity activity,ArrayList<HashMap<String, String>> list){
        super();
        this.activity=activity;
        this.list=list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    private class ViewHolder{
        TextView TextLineID;
        TextView TextItemID;
        TextView textLineM;
        TextView TextItemName;
        TextView TextTextQty;
        TextView TextSubQty;
        TextView TextPrice;
        TextView TextItemTotal;
        TextView TextUintID;
        TextView UintTwoID;
        TextView UintTwoPrice;
        TextView Add_Units_Count;
    }

    @Override
    public View getView(int position,View convertView, ViewGroup parent) {
        ViewHolder holder;
        LayoutInflater inflater = activity.getLayoutInflater();

        if(convertView == null){
            convertView=inflater.inflate(R.layout.datagridview, null);
            holder=new ViewHolder();
            holder.TextLineID = (TextView) convertView.findViewById(R.id.TextLineID);
            holder.TextItemID = (TextView) convertView.findViewById(R.id.TextItemID);
            holder.textLineM = (TextView) convertView.findViewById(R.id.TextLineM);
            holder.TextItemName = (TextView) convertView.findViewById(R.id.ItemName);
            holder.TextTextQty = (TextView) convertView.findViewById(R.id.TextQty);
            holder.TextSubQty = (TextView) convertView.findViewById(R.id.TextSubQty);
            holder.TextPrice = (TextView) convertView.findViewById(R.id.TextPrice);
            holder.TextItemTotal = (TextView) convertView.findViewById(R.id.TextItemTotal);
            holder.TextUintID = (TextView) convertView.findViewById(R.id.TextUintID);
            holder.UintTwoID = (TextView) convertView.findViewById(R.id.UintTwoID);
            holder.UintTwoPrice = (TextView) convertView.findViewById(R.id.UintTwoPrice);
            holder.Add_Units_Count = (TextView) convertView.findViewById(R.id.Add_Units_Count);
            convertView.setTag(holder);
            convertView.setId(position);
        }else{
          holder=(ViewHolder)
         convertView.getTag();
        convertView.setId(position);
        }

        HashMap<String, String> map=list.get(position);
        holder.TextLineID.setText(map.get(LineID));
        holder.TextItemID.setText(map.get(ItemID));
        holder.textLineM.setText(map.get(LineM));
        holder.TextItemName.setText(map.get(ItemName));
        holder.TextTextQty.setText(map.get(TextQty));
        holder.TextSubQty.setText(map.get(TextSubQty));
        holder.TextPrice.setText(map.get(TextPrice));
        holder.TextItemTotal.setText(map.get(Total_COLUMN));
        holder.TextUintID.setText(map.get(SUintID));
        holder.UintTwoID.setText(map.get(UintTwoID));
        holder.UintTwoPrice.setText(map.get(UintTwoPrice));
        holder.Add_Units_Count.setText(map.get(Add_Units_Count));
        return convertView;
    }
}





和我在创建







and my on create


final ArrayList<HashMap<String, String>> list = new  ArrayList<HashMap<String, String>>();
public static final String LineID = "LineID";
public static final String ItemID = "ItemID";
public static final String LineM = "LineM";
public static final String ItemName = "ItemName";
public static final String TextQty = "TextQty";
public static final String TextSubQty = "TextSubQty";
public static final String TextPrice = "TextPrice";
public static final String Total_COLUMN = "Total_COLUMN";
public static final String SUintID = "SUintID";
public static final String UintTwoID = "UintTwoID";
public static final String UintTwoPrice = "UintTwoPrice";
public static final String Add_Units_Count = "Add_Units_Count";

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.clientinvoices);
 this.setTitle("فاتورة مبيعات");
 EditText InvID = (EditText) findViewById(R.id.InvoiceIDValue);
 spinnerClientName = (SearchableSpinner) findViewById(R.id.ClientNameValue);
 spinnerStoreName = (SearchableSpinner) findViewById(R.id.StoreNameValue);
 spinnerItemName = (SearchableSpinner) findViewById(R.id.ITemNameValue);
 ClientNameS = (TextView) findViewById(R.id.ClientNameLebal);
 final EditText ItemCodeValueA = (EditText) findViewById(R.id.ItemCodeValue);
 EditText ItemCodeS = (EditText) findViewById(R.id.ItemCodeValue);
 ItemCodeS.setFocusableInTouchMode(true);
 ItemCodeS.requestFocus();
 final ListView listView = (ListView) findViewById(R.id.datagridview1);
 HashMap<String, String> hashmap = new HashMap<String, String>();
 ListViewAdapter adapter = new ListViewAdapter(this, list);
 listView.setAdapter(adapter);
}





和我的重新计算





And my recount

private void ReCount() {
 ListView listView1 = findViewById(R.id.datagridview1);
 double GetTotalValue = 0;
 for (int i = 0; i < listView1.getCount(); i++) {
try {
  TextView LineID = (TextView) listView1.getChildAt(i).findViewById(R.id.TextLineID);
  TextView LineM = (TextView) listView1.getChildAt(i).findViewById(R.id.TextLineM);
  TextView ItemID = (TextView) listView1.getChildAt(i).findViewById(R.id.TextItemID);
  TextView ItemName = (TextView) listView1.getChildAt(i).findViewById(R.id.ItemName);
  TextView Qty = (TextView) listView1.getChildAt(i).findViewById(R.id.TextQty);
  TextView SubQty = (TextView) listView1.getChildAt(i).findViewById(R.id.TextSubQty);
  TextView Price = (TextView) listView1.getChildAt(i).findViewById(R.id.TextPrice);
  TextView ItemTotal = (TextView) listView1.getChildAt(i).findViewById(R.id.TextItemTotal);
  TextView TUintTwoID = (TextView) listView1.getChildAt(i).findViewById(R.id.UintTwoID);
  TextView UintTwoPriceV = (TextView) listView1.getChildAt(i).findViewById(R.id.UintTwoPrice);
  TextView Add_Units_CountASDV = (TextView) listView1.getChildAt(i).findViewById(R.id.Add_Units_Count);

  double ergebnis = 0;
  double a = 0;
  double b = 0 ;
   if (String.valueOf(Qty.getText().toString()) != null && !Qty.getText().equals("0") && !Qty.getText().equals("null")){
   if (String.valueOf(Price.getText().toString()) != null && !Price.getText().equals("0") && !Price.getText().equals("null")){
  a = Double.parseDouble(Qty.getText().toString());
  b =  Double.parseDouble(Price.getText().toString());
  }else{a = 0;b = 0;}
  }else{a = 0;b = 0;}

  ergebnis = a * b;
  double ergebnisTwo = 0;
  double Suba = 0 ;
  double Subb = 0 ;
   if (String.valueOf(SubQty.getText().toString()) != null && !SubQty.getText().equals("0") && !SubQty.getText().equals("null")){
   if (String.valueOf(SubQty.getText().toString()) != null && !SubQty.getText().equals("0") && !SubQty.getText().equals("null")){
    Suba = Double.parseDouble(SubQty.getText().toString());
    Subb = Double.parseDouble(SubQty.getText().toString());
   }else{Suba = 0;Subb = 0;}
  }else{Suba = 0;Subb = 0;}

  if (Double.parseDouble(TUintTwoID.getText().toString()) != 0) {
   ergebnisTwo = Suba * Subb;
  }else{ergebnisTwo = 0;}

  double ergebnisThree = ergebnis + ergebnisTwo;
  ItemTotal.setText(String.valueOf(ergebnisThree));
  GetTotalValue += ergebnisThree;
}catch (Exception ex){ ex.printStackTrace();}
}

}





我尝试过:





What I have tried:

i have list view for sales item
and i'm always get error about null 
on row line number 9 until the end
before number 9 nothing and get no error
and i need to let you know i use the same item

i don't know how to fix this problem

推荐答案

创建新项目

Ex。 listviewProject



activity_main.xml

粘贴以下代码



Create the New Project
Ex. listviewProject

activity_main.xml
Paste the Below Code

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ListView
            android:id="@+id/listview"
            android:visibility="gone"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <TextView
            android:id="@+id/NoData"
            android:text="No Data"
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout>





并在android studio中创建新的XML文件

右键单击布局文件夹,然后单击新建,然后单击布局资源文件

粘贴以下代码





and Create the New XML File in android studio
right click on layout folder then click New then click Layout Resource File
Paste the below code

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/Clicked"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/b1"
            android:text="Loading..."
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout></per>

Then Creating the 4 class file in below
1) Tutorial
2) TutorialAdapter
3) TutorialData
4) TutorialHolder

1) Tutorial File Paste the Below Code
<pre>
   import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;

public class Tutorial{
    Context c;
    ListView listView;
    Activity a;
    TutorialAdapter chettingAdapter;
    TextView CNoData;

    public Tutorial(Context c, ListView listView, Activity a, TextView CNoData) {
        this.c = c;
        this.listView = listView;
        this.a = a;
        this.CNoData = CNoData;
    }
    public void getUpdate(ArrayList<TutorialData> chettingDatas)
    {
        if(chettingDatas.size()>0)
        {
            CNoData.setVisibility(View.GONE);
            listView.setVisibility(View.VISIBLE);
            chettingAdapter = new TutorialAdapter(c,a,chettingDatas);
            listView.setAdapter((ListAdapter)chettingAdapter);
        }
        else
        {
            CNoData.setVisibility(View.VISIBLE);
            CNoData.setText("No Data");
            listView.setVisibility(View.GONE);
        }
    }
}

</per>
2) TutorialAdapter File Paste the Below Code
<pre>
  import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Toast;
import java.util.ArrayList;

public class TutorialAdapter extends BaseAdapter {
    Context c;
    Activity a;
    ArrayList<TutorialData> chettingDatas;
    LayoutInflater layoutInflater;

    public TutorialAdapter(Context c, Activity a, ArrayList<TutorialData> chettingDatas) {
        this.c = c;
        this.a = a;
        this.chettingDatas = chettingDatas;
    }

    @Override
    public int getCount() {
        return chettingDatas.size();
    }

    @Override
    public Object getItem(int position) {
        return chettingDatas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (layoutInflater == null) {
            layoutInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        if (convertView == null)
        {
            convertView= layoutInflater.inflate(R.layout.layout_tutorial,parent,false);
        }
        TutorialHolder Holder = new TutorialHolder(convertView);
        Holder.b1.setText(chettingDatas.get(position).getData());
        Holder.b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(c, "Clicked : "+chettingDatas.get(position).getData(), Toast.LENGTH_SHORT).show();
            }
        });
        return convertView;
    }
}



3)TutorialData文件粘贴下面的代码


3) TutorialData File Paste the Below Code

  public class TutorialData {
    private String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}



4)TutorialHolder文件粘贴以下代码


4) TutorialHolder File Paste the Below Code

public class TutorialHolder {
    Button b1;
    TutorialHolder(View v)
    {
        b1 = (Button)v.findViewById(R.id.b1);
    }
}





然后最后一个代码是MainActivity.java粘贴下面的代码



Then the Last Code is MainActivity.java paste the below code

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listview = (ListView)findViewById(R.id.listview);
        TextView NoData = (TextView)findViewById(R.id.NoData);
        ArrayList<TutorialData> chettingDatas= new ArrayList<>();
        TutorialData T = new TutorialData();
        T.setData("Hello");
        chettingDatas.add(T);
        TutorialData T1 = new TutorialData();
        T1.setData("Bro");
        chettingDatas.add(T1);
        TutorialData T2 = new TutorialData();
        T2.setData("Hi");
        chettingDatas.add(T2);
        TutorialData T3 = new TutorialData();
        T3.setData("Buy");
        chettingDatas.add(T3);
        Tutorial Tu = new Tutorial(MainActivity.this,listview,MainActivity.this,NoData);
        Tu.getUpdate(chettingDatas);
    }
}





下面的评论框我发送测试的apk文件发送你可以检查工作...

好​​买...



Below Comment Box to i am sending the tested apk file send you can check the working...
Good Buy...


这篇关于如何修复listview此错误尝试在空对象引用上调用虚方法android.view.view.findviewbyid(int)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆