Reputation: 755
I am trying to store the data from an EditText into a ListView from another activity using a SimpleAdapter
that is using pre defined rows from another XML file. All of this is defined in the button called Save Todo
Everything works fine but when it comes to storing the data, I get a null pointer error. Image https://i.sstatic.net/DR5uA.png
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
public class Add_Item extends ActionBarActivity {
//variables
EditText TaskNameET;
Spinner SpinType;
Button SaveTodo;
String SpinnerOptions[] = {"OptionOne", "OptionTwo", "OptionThree"};
SimpleAdapter ListAdapt;
//call mainactivity class
MainActivity Main;
//declare arraylist and HashMap
ArrayList<HashMap<String, String>> mylist;
HashMap<String, String> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__item);
//define vars
TaskNameET = (EditText) findViewById(R.id.TaskNameET);
SpinType = (Spinner) findViewById(R.id.spinner1);
SaveTodo = (Button) findViewById(R.id.button1);
//initialize mylist and map
mylist = new ArrayList<HashMap<String, String>>();
map = new HashMap<String, String>();
//SimpleAdapter
ListAdapt = new SimpleAdapter(this, mylist, R.layout.row, new String[] {"columnone", "columntwo", "columnthree"}, new int[] {R.id.columnone, R.id.columntwo, R.id.columnthree});
//adapter for spinner
ArrayAdapter<String> ard=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, SpinnerOptions);
SpinType.setAdapter(ard);
//onclick todobutton
SaveTodo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
map.put("columnone", Add_Item.this.TaskNameET.getText().toString());
map.put("columntwo", Add_Item.this.TaskNameET.getText().toString());
map.put("columnthree", Add_Item.this.TaskNameET.getText().toString());
mylist.add(map);
Main.MainList.setAdapter(ListAdapt);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.add__item, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
//R.layout Add_Item XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.moduleonesimpleapplication.Add_Item" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30sp"
android:text="@string/TitleText"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/TaskNameET"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="34dp"
android:ems="10"
android:inputType="text" >
<requestFocus />
<requestFocus />
</EditText>
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignRight="@+id/TaskNameET"
android:layout_below="@+id/TaskNameET"
android:layout_marginTop="27dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/TaskNameET"
android:layout_alignParentLeft="true"
android:text="@string/TaskNameTXT" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView3"
android:layout_marginTop="48dp"
android:text="@string/TaskDateTXT" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView4"
android:layout_alignBottom="@+id/textView4"
android:layout_alignLeft="@+id/spinner1"
android:ems="10"
android:inputType="date" >
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/editText2"
android:text="@string/SaveButton" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/spinner1"
android:layout_alignLeft="@+id/textView2"
android:layout_marginBottom="19dp"
android:text="@string/TaskTypeTxT" />
</RelativeLayout>
//R.layout Row.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/columnone"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:textColor="#C0C0C0"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/columntwo"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:textColor="#C0C0C0"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/columnthree"
android:layout_width="120dip"
android:layout_height="wrap_content"
android:textColor="#C0C0C0"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
Upvotes: 0
Views: 261
Reputation: 1701
You have to initialize all variables (your map, your list etc.) in your onCreate
method, not in the "declare" section.
I hope this helps ;)
EDIT:
According to your comment: setAdapter is being applied to a "null instance" of MainActivity. Why don't you create an static method in MainActivity which modifies your adapter? You will have to call it in the static way (nameClass.nameMethod(..)
).
Be sure that this activity is always created after your MainActivity!
In your main activity:
MainList
staticDeclare a static "mathod for having access to it:
public static ListView getMainList(){return MainList;}
In your Add_activity
:
MainActivity main;
Change you line MainActivty.Main.setAdap...
for
MainActivity.getMainList().setAdapter(ListAdapt);
Eventhough... I think you are missing some points of Android basics because it's a really hard way of development for me.
Good luck!
Upvotes: 1