我一直在尝试修复这个空指针异常,但我不能。我知道它指向一个空对象,但我不知道如何修复它。我是 Java 编程的初学者,所以如果这是一个愚蠢的问题,请不要生气。
这是我的代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
public ArrayAdapter<String> itemsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//EditText
final EditText etTask = (EditText) findViewById(R.id.editText);
final String Task = etTask.getText().toString();
//Button
Button btn = (Button) findViewById(R.id.button);
//Null Fix
//OnClickListeners
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemsAdapter.add(Task);
etTask.setText("");
}
});
}
}
这是我的 Logcat:
09-04 06:58:32.704 16735-16735/com.example.elias.doit E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.elias.doit, PID: 16735
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.add(java.lang.Object)' on a null object reference
at com.example.elias.doit.MainActivity$1.onClick(MainActivity.java:38)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
09-04 06:58:40.564 16735-16735/? I/Process﹕ Sending signal. PID: 16735 SIG: 9
Your itemsAdapter
从未被初始化。而且它根本没有任何价值。这就是为什么你会得到一个NullPointerException当你打电话给你的add()
.
尝试这样做:
ArrayList<String> data = new ArrayList<>();
// add some data to your ArrayList.
itemsAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, data);
您还可以使用String[]
数组而不是ArrayList<String>
或任何其他List<String>
对于这个问题。
在你的代码中它应该看起来像:
private ArrayAdapter<String> itemsAdapter;
private ArrayList<String> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//EditText
final EditText etTask = (EditText) findViewById(R.id.editText);
final String task = etTask.getText().toString();
data = new ArrayList<>();
itemsAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);
//Button
Button btn = (Button) findViewById(R.id.button);
//OnClickListeners
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data.add(task);
itemsAdapter.notifyDataSetChanged();
etTask.setText("");
}
});
Edit:如果你正在创建那个ArrayAdapter
用于类似的东西ListView
。你的代码在哪里?我猜你也忘记了。
就像是:
ListView lv = (ListView) findViewById(R.id.yourListView);
// initialize the adapter and stuff.
lv.setAdapter(itemsAdapter);
如需进一步阅读ListView
和适配器,看看这个链接, and 本教程。另外,检查the docs.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)