-1

i am new to android,help with the code how add EditText value to ListView using BaseAdapter by clicking Button. when i enter value in EditText and by clicking Add Button, value must place in ListViw(ListView must have BaseAdapter only). here tried with code found with error,help me to complete my code

public class AddlistActivity extends Activity {
ListView lstName;
Button btnAdd;
EditText edtName;
String myData;
Context context=AddlistActivity.this;
ArrayList<ListDataActivity>list=new ArrayList<ListDataActivity>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_addlist);

    lstName=(ListView)findViewById(R.id.lst_name);
    btnAdd=(Button)findViewById(R.id.btn_add);
    edtName=(EditText)findViewById(R.id.edt_name);
    getDataInList();

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myData=edtName.getText().toString().trim();
            getDataInList();
            ((BaseAdapter)lstName.getAdapter()).notifyDataSetChanged();
        }
    });

    lstName.setAdapter(new MyBaseAdapterActivity(context,list));
}
private void getDataInList()
{
    for (int i = 0 ; i < myData.length();i++)
    {
        ListDataActivity listDataActivity = new ListDataActivity();
        listDataActivity.setMyData(myData);
        list.add(listDataActivity);
    }
}}

ListDataActivity.java

public class ListDataActivity {
String myData;

public String getMyData()
{
    return myData;
}
public  void setMyData(String myDataa)
{
    myData=myDataa;
}}

MyBaseAdapterActivity.java

public class MyBaseAdapterActivity extends BaseAdapter {

ArrayList<ListDataActivity> list =new ArrayList<ListDataActivity>();
LayoutInflater inflater;
Context context;

public MyBaseAdapterActivity(Context context,ArrayList<ListDataActivity>list)
{
    this.list=list;
    this.context=context;
    inflater = LayoutInflater.from(this.context);
}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    MyViewHolder myViewHolder;
    HashMap<String , Long >hashMap= new HashMap<String , Long>();

    if (convertView==null)
    {
        convertView=inflater.inflate(R.layout.activity_addlist,parent,false);
        myViewHolder=new MyViewHolder(convertView);
        convertView.setTag(myViewHolder);
    }else {
        myViewHolder =(MyViewHolder)convertView.getTag();
    }

    myViewHolder.editText=detials(convertView,R.id.edt_name,list.get(position).getMyData());

    return convertView;
}

private EditText detials(View v , int resId , String text)
{
    EditText et =(EditText)v.findViewById(resId);
    et.setText(text);
    return et;
}

private static class MyViewHolder{
   EditText editText;

    public MyViewHolder(View item)
    {
    }
}}

logcat

11-17 15:26:19.885    2787-2787/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.rahul.listviewwithbaseadapter, PID: 2787
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rahul.listviewwithbaseadapter/com.example.rahul.listviewwithbaseadapter.AddlistActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
        at com.example.rahul.listviewwithbaseadapter.AddlistActivity.getDataInList(AddlistActivity.java:48)
        at com.example.rahul.listviewwithbaseadapter.AddlistActivity.onCreate(AddlistActivity.java:33)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
Rahul
  • 404
  • 4
  • 16
  • 2
    post your logcat for the crash – Bhargav Nov 17 '15 at 09:45
  • why do you prefer using BaseAdapter for this. You can use ArrayAdapter and call ArrayAdapter#add() method to add new data to list. It will notify your listView automatically. – sembozdemir Nov 17 '15 at 09:50
  • I am learning to set BaseAdapter @sembozdemir – Rahul Nov 17 '15 at 10:01
  • Possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Smittey Nov 17 '15 at 10:45

2 Answers2

1

there are some logic problems in your code. Based on my assumption, you are trying to create a dynamic list that grows based on the words in EditText on the button click event. Below are the code :

Create an XML in layout folder call list_cells.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp">

<TextView
        android:id="@+id/list_cell_textview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

</RelativeLayout>

AddlistActivity.java

public class AddlistActivity extends Activity {

    ListView lstName;
    Button btnAdd;
    EditText edtName;
    String myData;
    Context context = AddlistActivity.this;
    ArrayList<ListDataActivity>list = new ArrayList<ListDataActivity>();
    MyBaseAdapterActivity baseAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addlist);

        lstName=(ListView)findViewById(R.id.lst_name);
        btnAdd=(Button)findViewById(R.id.btn_add);
        edtName=(EditText)findViewById(R.id.edt_name);
        baseAdapter = new MyBaseAdapterActivity(AddlistActivity.this, list);
        lstName.setAdapter(baseAdapter);

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myData = edtName.getText().toString().trim();
                setDataIntoList(myData);
                baseAdapter.updateMyList(list);
            }
        });
    }

    private void setDataIntoList(String data)
    {
     ListDataActivity tempListDataActivity = new ListDataActivity();
     tempListDataActivity.setMyData(data);
     list.add(tempListDataActivity);
    }
}

ListDataActivity.java

public class ListDataActivity {

    String myData;

    public String getMyData()
    {
        return myData;
    }

    public  void setMyData(String myDataa)
    {
        myData = myDataa;
    }
}

MyBaseAdapterActivity.java

public class MyBaseAdapterActivity extends BaseAdapter {

    static class MyViewHolder {
        EditText editText;
    }

    private ArrayList<ListDataActivity> list;
    private MyViewHolder myViewHolder;


    public MyBaseAdapterActivity(Context context,ArrayList<ListDataActivity>list)
    {
        this.list = list;
        this.context = context;
    }

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

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

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

    public void updateMyList(ArrayList<ListDataActivity> list) {
        this.list = list;
        this.notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_cells, parent,false);

            myViewHolder = new MyViewHolder();
            myViewHolder.textView = (TextView) convertView.findViewById(R.id.list_cell_textview);
            convertView.setTag(myViewHolder);
        } else {
            myViewHolder =(MyViewHolder)convertView.getTag();
        }

        myViewHolder.textView.setText(list.get(position).getMyData());

        return convertView;
    }
}

The above code should work. If there are errors, please reply here again, and I will try to assist you.

Smittey
  • 2,475
  • 10
  • 28
  • 35
Nicholas Tee
  • 281
  • 2
  • 7
1

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference at com.example.rahul.listviewwithbaseadapter.AddlistActivity.getDataInList(AddlistActivity.java:48)

You have a NullPointerException when you try to call myData.length() in getDataInList() method because myData is null.

You forgot to initialise myData for the first call of getDataInList().

Rami
  • 7,879
  • 12
  • 36
  • 66