Как исправить listview эта ошибка попытка вызвать виртуальный метод android.view.view.findviewbyid(int) по ссылке на нулевой объект
помогите мне пожалуйста
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
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; } }
и меня на создание
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); }
И мой рассказ
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();} } }
Что я уже пробовал:
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
Richard MacCutchan
Вы не сказали нам, какая из них 65-я. Вам нужно выяснить, почему вы получаете нулевую ссылку, и исправить код, чтобы этого не произошло.
Mostafa Salama S
строка 650 является
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)
после того как я удалю первую строку дайте мне ту же ошибку на следующей строке
David Crow
О чем говорит строка № 650 Main3Activity.java
похож? Вот где ваш null
на объект делается ссылка.
Mostafa Salama S
строка 650 является
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);
after i remove first line give me the same error on next line
David Crow
Это означает, что либо listView1
является null
или возвращаемое значение из getChildAt(i)
является null
.
Richard MacCutchan
Я не понимаю, что должна делать вторая часть этих утверждений.