如何修复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
问题描述
请帮助我
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屋!