java - 在方法中调用私有(private)最终变量时出现 NullPointerException

标签 java android nullpointerexception private

我创建 private ArrayList<String> values; . valuesonCreate 中分配了一个值方法(final ArrayList<String> values = new ArrayList<String>();)。另一种方法onOptionsItemSelected尝试使用 values , 然后是 NullPointerException发生了。

全类是here ,抱歉,如果我的解释难以理解。异常发生在第 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;
}

如果您需要更多信息(尽管我对此表示怀疑),请告诉我,在此先感谢您。

最佳答案

在第 23 行,值被声明为局部变量(不同于您的实例变量)。相反,将第 66 行更改为 private final ArrayList<String> values;和第 23 行到 values = new ArrayList<String>();

Java 允许局部变量和实例变量同名。在这种情况下,它使用局部变量进行操作,因此您在 onCreate 中不会出错。但是后来变量超出了范围(并且实例变量仍然没有被赋值)。

关于java - 在方法中调用私有(private)最终变量时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8631243/

相关文章:

java - Wildfly 9 忽略 web.xml 条目

java - 如何用maven 3生成eclipse项目?

android - 在微调器中更改样式的问题

Java - Graph.java 中的 NullPointerException

java - 带有 ListSelectionListener 的奇怪随机 NPE

java - 如何在 Java 中使用泛型获取反射构造函数?

android - 带有奇怪 logcat 错误的 Google Maps V2 加载 map 失败

iphone - 多操作系统与SIngle OS电话和服务器开发

java - Internet Explorer WebDriver 空指针异常

java - Android Studio 代码与 Eclipse ADT 中的代码相同吗?