Mostafa Salama S Ответов: 1

Как исправить 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

Я не понимаю, что должна делать вторая часть этих утверждений.

1 Ответов

Рейтинг:
2

Pratishkumar Kushwaha

Создайте новый проект
Например, listviewProject

activity_main.xml
Вставьте приведенный ниже код

<?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>


и создайте новый XML файл в android studio
щелкните правой кнопкой мыши папку макета затем нажмите кнопку Создать затем выберите файл ресурсов макета
Вставьте приведенный ниже код

<?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 вставьте приведенный ниже код
  public class TutorialData {
    private String data;

    public String getData() {
        return data;
    }

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

4) файл TutorialHolder вставьте приведенный ниже код
public class TutorialHolder {
    Button b1;
    TutorialHolder(View v)
    {
        b1 = (Button)v.findViewById(R.id.b1);
    }
}


Тогда последний код-это MainActivity.java вставьте приведенный ниже код
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 файл отправить Вы можете проверить, рабочая...
хорошая покупка...


Pratishkumar Kushwaha

https://drive.google.com/open?id=1La8_XYJbodMJg1wq3QQfoSup6t5yMe0M

Эта ссылка находится на Google Диске, так что вы можете скачать apk-файл look the working

Я надеюсь решить вашу проблему

Pratishkumar Kushwaha

если ты проблему решишь братан

Mostafa Salama S

нет :(

Mostafa Salama S

https://imgur.com/5pakGqb

ничего не скачет до строки номер 9

Pratishkumar Kushwaha

Можете ли вы объяснить свои фактические данные, которые будут отображаться в listview bro?

Mostafa Salama S

я выведу на экран 11 строчек

проблема происходит из строки номер строки 9 я не знаю почему дайте мне ошибку none nothing before

я пытаюсь сделать счет продаж :(

Pratishkumar Kushwaha

Можешь ли ты попробовать вышеприведенный код братан
вот в одном классе TutorialData является получить какие-либо сведения будут храниться TutorialData вы можете пройдя элемент управления ListView адаптер, так что вы можете попробовать приведенный выше код
и я выше ссылки отправить диск скачать приложение и установить в проверить работу братан