I create private ArrayList<String> values;. values is assigned a value in the onCreate method (final ArrayList<String> values = new ArrayList<String>();). Another method onOptionsItemSelected tries to use values, but then a NullPointerException happens.
The whole class is here, sorry if my explanation was hard to understand. The exception occurs on line 55.
package org.sandholm.max.MCFriendsList;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ArrayAdapter;
public class MCFriendsListActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listactivity);
final ArrayList<String> values = new ArrayList<String>();
setListAdapter(new ArrayAdapter<String>(this, R.layout.listactivity, values));
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
addUser = (Button) findViewById(R.id.button1);
addUser.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
values.add("vurp0");
adapter.notifyDataSetChanged();
}
});
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String item = (String) getListAdapter().getItem(position);
Intent i = new Intent(v.getContext(), MCFriendsInfoActivity.class);
i.putExtra("uname", item);
v.getContext().startActivity(i);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.item1:
values.add("vurp0");
adapter.notifyDataSetChanged();
return true;
case R.id.item2:
//showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private Button addUser;
private ArrayList<String> values;
private ArrayAdapter<String> adapter;
}
Please tell me if you need more information(although I doubt it) and thanks in advance.
On line 23 values is declared as a local variable (different than your instance variable). Instead, change line 66 to
private final ArrayList<String> values;and line 23 tovalues = new ArrayList<String>();Java allows local variables and instance variables to have the same name. In this case, it uses the local variable for operations so you get no error in
onCreatebut later the variable is out of scope (and the instance variable still has not been assigned a value).