Android 活动中的空指针异常
TaskList.javaAndroid 活动中的空指针异常,android,listview,nullpointerexception,Android,Listview,Nullpointerexception,TaskList.java package com.teslaprime.prirt; import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.content.Context; import android.content.ContentValues; import android.view.View; import android.view.Vie
package com.teslaprime.prirt;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.content.Context;
import android.content.ContentValues;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.ListAdapter;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.LinearLayout;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.Cursor;
import java.util.ArrayList;
import java.util.List;
public class TaskList extends Activity {
List<Task> tasks = new ArrayList<Task>();
TaskAdapter adapter = null;
SQLiteDatabase db = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent setupEntry = new Intent (TaskList.this, SetupEntry.class);
boolean first = checkDatabase() ? true : false;
db = openOrCreateDatabase("priRT.db",
SQLiteDatabase.CREATE_IF_NECESSARY,null);
db.setVersion(1);
db.setLockingEnabled(true);
db.execSQL("create table if not exists tasks ("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "time integer,"
+ "type text);");
db.execSQL("create table if not exists schedule ("
+ "id integer primary key autoincrement,"
+ "hours_free integer);");
if (first) { startActivityForResult(setupEntry,0); }
adapter = new TaskAdapter();
Cursor cur = db.query("tasks",null,null,null,null,null,null);
cur.moveToFirst();
while (cur.isAfterLast() == false) {
Task task = new Task();
task.name = cur.getString(cur.getColumnIndex("name"));
task.type = cur.getString(cur.getColumnIndex("type"));
adapter.add(task);
cur.moveToNext();
}
cur.close();
Button add = (Button) findViewById(R.id.addTask);
add.setOnClickListener(onAdd);
ListView list = (ListView) findViewById(R.id.tasks);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView av, View v, int pos, long id) {
Task task = adapter.getItem(pos);
adapter.remove(task);
db.execSQL("delete from tasks where name = '" + task.name + "';");
}
});}
private boolean checkDatabase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(
"/data/data/com.teslaprime.prirt/databases/priRT.db", null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {}
return checkDB == null ? true : false;
}
private View.OnClickListener onAdd = new View.OnClickListener() {
public void onClick(View view) {
Intent addTask = new Intent (view.getContext(), TaskEntry.class);
startActivityForResult(addTask, 2);
}
};
protected void onActivityResult(int req, int res, Intent data) {
if (req == 0 && res == RESULT_OK) {
Intent setup = new Intent (TaskList.this, Setup.class);
startActivityForResult(setup, 1);
}
if (req == 2 && res == RESULT_OK) {
Task task = new Task();
task.name = data.getStringExtra("name");
task.type = data.getStringExtra("type");
adapter.add(task);
ContentValues values = new ContentValues();
values.put("name", data.getStringExtra("name"));
values.put("type", data.getStringExtra("type"));
db.insert("tasks", null, values);
}
}
class TaskAdapter extends ArrayAdapter<Task> {
TaskAdapter() {super(TaskList.this,R.layout.task,tasks);}
private List<Task> taskList;
private Context context;
public View getView(int pos, View convertView, ViewGroup parent) {
View task = convertView;
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
task = inflater.inflate(R.layout.task,null);
}
TextView taskName = (TextView) task.findViewById(R.id.name);
TextView taskType = (TextView) task.findViewById(R.id.type);
taskName.setText(tasks.get(pos).name);
taskType.setText(tasks.get(pos).type);
return (task);
}
}
}
您的
适配器可能是空的
如果您的任务
表为空,则不会为适配器
任务设置任何内容。您的适配器
可能为空
如果任务
表为空,则适配器
任务将不会设置任何内容。如果此行返回null:
list.setAdapter(adapter);
这意味着您传入的适配器为null或listview为null。使用断点和调试模式找出它是哪一个。如果此行返回null:
list.setAdapter(adapter);
这意味着您传入的适配器为null或listview为null。使用断点和调试模式找出它是哪个。问题是第68行是任务列表文件/类。但清单上没有行号。哪一行是68?第68行是list.setAdapter(适配器);好啊这是个谜。我很确定,在ListView list=(ListView)findViewById(R.id.tasks)之后,列表是空的;从资源获取ListView的行。但是,当您成功地从上面的参考资料中获得add按钮时,为什么会这样呢?我注意到的一件事是,您正在XML中使用MATCH_PARENT。如果您切换到填充父项会发生什么情况?我确实相信这就是问题所在,因为这是在xml文件中进行了一次小的编辑之后发生的。。。但是是的,正如你所说,身份证仍然是有定义的。我在所有其他xml文件中都使用了match_parent,自从我读到fill_parent被折旧后就没问题了。Google团队试图将其更改为match_parent。。然而;这并不适用于所有版本的android。默认情况下,应使用“填充父项不匹配父项”。但即使这样,也不应该导致错误。。它会抱怨错误的XML标记,而不是空指针,问题是第68行是任务列表文件/类。但清单上没有行号。哪一行是68?第68行是list.setAdapter(适配器);好啊这是个谜。我很确定,在ListView list=(ListView)findViewById(R.id.tasks)之后,列表是空的;从资源获取ListView的行。但是,当您成功地从上面的参考资料中获得add按钮时,为什么会这样呢?我注意到的一件事是,您正在XML中使用MATCH_PARENT。如果您切换到填充父项会发生什么情况?我确实相信这就是问题所在,因为这是在xml文件中进行了一次小的编辑之后发生的。。。但是是的,正如你所说,身份证仍然是有定义的。我在所有其他xml文件中都使用了match_parent,自从我读到fill_parent被折旧后就没问题了。Google团队试图将其更改为match_parent。。然而;这并不适用于所有版本的android。默认情况下,应使用“填充父项不匹配父项”。但即使这样,也不应该导致错误。。它会抱怨一个坏的XML标记,而不是我认为的空指针。适配器之前工作正常,我没有对它做任何更改,所以我认为这不是问题所在。我看不出listview是如何为空的。。。id是在xml文件中定义的,它与您认为知道的内容无关。请验证它。进入调试模式,查看在该点之前变量是什么。我的xml中有'layout_below=“@id/tasks”,当没有任务时会导致异常:pcoull已经发现通过调试模式,调试模式对解决此类问题非常有帮助。我的建议是使用日志/调试模式的组合来找出这些类型的错误。。。但是,是的,要小心相对布局容易出错。。LOL适配器之前工作正常,我没有对其进行任何更改,所以我认为这不是问题所在。我看不出listview是如何为空的。。。id是在xml文件中定义的,它与您认为知道的内容无关。请验证它。进入调试模式,查看在该点之前变量是什么。我的xml中有'layout_below=“@id/tasks”,当没有任务时会导致异常:pcoull已经发现通过调试模式,调试模式对解决此类问题非常有帮助。我的建议是使用日志/调试模式的组合来找出这些类型的错误。。。但是,是的,要小心相对布局容易出错。。洛威尔。。我的适配器之前工作正常,我没有对它做任何更改,所以我不知道这是怎么回事..你的数据库不知怎么被清空了吗?我一直在尝试,是的,它已经得到了很好的解决。我的xml中有'layout_below=“@id/tasks”,它在没有任务时导致异常:Pwell。。我的适配器之前工作正常,我没有对它做任何更改,所以我不知道这是怎么回事..你的数据库不知怎么被清空了吗?我一直在尝试,是的,它已经得到了很好的解决。我的xml中有'layout_below=“@id/tasks”,它在没有任务时导致异常:P
list.setAdapter(adapter);