- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图从 sqlite 数据库中获取数据并将其加载到 ListView 中,但出现此错误
12-23 02:04:01.751 3296-3296/com.chaos.todolist E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.chaos.todolist, PID: 3296
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chaos.todolist/com.chaos.todolist.show}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
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:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at com.chaos.todolist.DataBase.getTasks(DataBase.java:28)
at com.chaos.todolist.show.LoadDataFromDataBaseToListView(show.java:30)
at com.chaos.todolist.show.onCreate(show.java:25)
at android.app.Activity.performCreate(Activity.java:6289)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
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:1400)at com.android.in ternal.os.ZygoteInit.main(ZygoteInit.java:1195)
这是数据库类函数,我有另一个是助手 ..
package com.chaos.todolist;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DataBase {
private SQLiteDatabase mDatabase;
private DB_Helper TODOHelper;
public DataBase(Context context) {
TODOHelper = new DB_Helper(context);
}
public void open() {
mDatabase = TODOHelper.getWritableDatabase();
}
public void close() {
if (mDatabase != null) {
mDatabase.close();
}
}
public Cursor getTasks() {
String[] col = {TODOHelper.COLUMN_ID, TODOHelper.COLUMN_NAME };
Cursor cursor = mDatabase.query(
TODOHelper.TABLE_TASKS, // table name
col , // column names
null, // where clause
null, // where params
null, // groupby
null, // having
TODOHelper.COLUMN_NAME // orderby
);
return cursor;
}
public Cursor getTasksById(int id) {
String[] columns = {TODOHelper.COLUMN_NAME, TODOHelper.COLUMN_DATE,
TODOHelper.COLUMN_ADDRESS};
return mDatabase.query(
DB_Helper.TABLE_TASKS, // table name
columns, // column names
DB_Helper.COLUMN_ID + " = " + id, // where clause // id param. could be here or appended as it is ^
null, // where params
null, // groupby
null, // having
null // orderby
);
}
public void deleteTaskById(int id) {
open();
mDatabase.delete(
DB_Helper.TABLE_TASKS, // table name
DB_Helper.COLUMN_ID +"="+ id, // where clause
null // where params
);
close();
}
public void insertTask(String name, String date, String address) {
mDatabase.beginTransaction();
try {
ContentValues newTask = new ContentValues();
newTask.put(DB_Helper.COLUMN_NAME, name);
newTask.put(DB_Helper.COLUMN_DATE, date);
newTask.put(DB_Helper.COLUMN_ADDRESS, address);
mDatabase.insert(DB_Helper.TABLE_TASKS, null, newTask);
mDatabase.setTransactionSuccessful();
}
finally {
mDatabase.endTransaction();
}
}
public void updateTask(int rowId, String name, String date, String address) {
ContentValues editTask = new ContentValues();
editTask.put(DB_Helper.COLUMN_NAME, name);
editTask.put(DB_Helper.COLUMN_DATE, date);
editTask.put(DB_Helper.COLUMN_ADDRESS, address);
mDatabase.update(
DB_Helper.TABLE_TASKS, // table name
editTask, // values
DB_Helper.COLUMN_ID + " = " + rowId, // where clause
null // where params
);
}
}
这是我应该使用加载数据函数的类显示.java
package com.chaos.todolist;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class show extends AppCompatActivity {
ListView listView;
DataBase db;
TextView empty;
Cursor result;
ArrayAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
listView=( ListView) findViewById(R.id.listView1);
db=new DataBase(show.this);
empty = (TextView) findViewById(android.R.id.empty);
Log.d("show", "is going to load database");
LoadDataFromDataBaseToListView();
listView.setEmptyView(empty);
}
public void LoadDataFromDataBaseToListView() {
result=db.getTasks();
Log.d("show","it got tasks");
if (result != null && result.getCount() > 0) {
Log.d("load data", "Load Data From DataBase To ListView has started");
db.open();
int i = 0;
String[] names = new String[result.getCount()];
int[] ids = new int[result.getCount()];
try {
Log.d("load data","in thr try");
if (result.moveToFirst()) {
int index_id = result.getColumnIndex(DB_Helper.COLUMN_ID);
int index_name = result.getColumnIndex(DB_Helper.COLUMN_NAME);
Log.d("load data", "got the index");
do {
ids[i] = result.getInt(index_id);
String ss = result.getString(index_name);
names[i] = ss;
++i;
} while (result.moveToNext());
db.close();
Log.d("load data", "clossed connection to database");
adapter = new ArrayAdapter<String>(
getApplicationContext(),
R.layout.taskitem,R.id.Task_name,
names);
listView.setAdapter(adapter);
Log.d("load data", "try finished");
}
} catch (Exception e) {
Log.d("load data", "in catch");
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
}
Log.d("load data", "finished if");
} else {
Log.d("load data", "in else");
Toast.makeText(this, "is null", Toast.LENGTH_LONG).show();
}
}
protected void onResume() {
super.onResume();
}
protected void onPause()
{
super.onPause();
}
}
最佳答案
添加到上面的海报中,如果您担心保护,您可能希望将 open 方法设为私有(private)或 protected :
protected void open()
{
mDatabase = TODOHelper.getWritableDatabase();
}
然后将构造函数更改为:
public DataBase(Context context) {
TODOHelper = new DB_Helper(context);
open();
}
这可能会在以后节省一些精力。
关于java - 试图在android中将数据从数据库加载到ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426661/
我想要显示正在加载的 .gif,直到所有内容都已加载,包括嵌入的 iframe。但是,目前加载 gif 会在除 iframe 之外的所有内容都已加载后消失。我怎样才能让它等到 iframe 也加载完毕
首先,这是我第一次接触 Angular。 我想要实现的是,我有一个通知列表,我必须以某种方式限制 limitTo,因此元素被限制为三个,在我单击按钮后,其余的应该加载。 我不明白该怎么做: 设置“ V
我正在尝试在我的设备上运行这个非常简单的应用程序(使用 map API V2),并且出于某种原因尝试使用 MapView 时: 使用 java 文件: public class MainMap e
我正在使用 Python 2.6、Excel 2007 Professional 和最新版本的 PyXLL。在 PyXLL 中加载具有 import scipy 抛出异常,模块未加载。有没有人能够在
我想做这个: 创建并打包原始游戏。然后我想根据原始游戏中的蓝图创建具有新网格/声音/动画和蓝图的其他 PAK 文件。原始游戏不应该知道有关其他网格/动画/等的任何信息。因此,我需要在原始游戏中使用 A
**摘要:**在java项目中经常会使用到配置文件,这里就介绍几种加载配置文件的方法。 本文分享自华为云社区《【Java】读取/加载 properties配置文件的几种方法》,作者:Copy工程师。
在 Groovy 脚本中是否可以执行条件导入语句? if (test){ import this.package.class } else { import that.package.
我正在使用 NVidia 视觉分析器(来自 CUDA 5.0 beta 版本的基于 eclipse 的版本)和 Fermi 板,我不了解其中两个性能指标: 全局加载/存储效率表示实际内存事务数与请求事
有没有办法在通过 routeProvider 加载特定 View 时清除 Angular JS 存储的历史记录? ? 我正在使用 Angular 创建一个公共(public)安装,并且历史会积累很多,
使用 Xcode 4.2,在我的应用程序中, View 加载由 segue 事件触发。 在 View Controller 中首先调用什么方法? -(void) viewWillAppear:(BOO
我在某些Django模型中使用JSONField,并希望将此数据从Oracle迁移到Postgres。 到目前为止,当使用Django的dumpdata和loaddata命令时,我仍然没有运气来保持J
创建 Nib 时,我需要创建两种类型:WindowNib 或 ViewNib。我看到的区别是,窗口 Nib 有一个窗口和一个 View 。 如何将 View Nib 加载到另一个窗口中?我是否必须创建
我想将多个env.variables转换为静态结构。 我可以手动进行: Env { is_development: env::var("IS_DEVELOPMENT")
正如我从一个测试用例中看到的:https://godbolt.org/z/K477q1 生成的程序集加载/存储原子松弛与普通变量相同:ldr 和 str 那么,宽松的原子变量和普通变量之间有什么区别吗
我有一个重定向到外部网站的按钮/链接,但是外部网站需要一些时间来加载。所以我想添加一个加载屏幕,以便外部页面在显示之前完全加载。我无法控制外部网站,并且外部网站具有同源策略,因此我无法在 iFrame
我正在尝试为我的应用程序开发一个Dockerfile,该文件在初始化后加载大量环境变量。不知何故,当我稍后执行以下命令时,这些变量是不可用的: docker exec -it container_na
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我刚刚遇到一个问题,我有一个带有一些不同选项的选择标签。 现在我想检查用户选择了哪些选项。 然后我想将一个新的 html 文件加载到该网站(取决于用户选中的选项)宽度 javascript,我该怎么做
我知道两种保存/加载应用程序设置的方法: 使用PersistentStore 使用文件系统(存储,因为 SDCard 是可选的) 我想知道您使用应用程序设置的做法是什么? 使用 PersistentS
我开始使用 Vulkan 时偶然发现了我的第一个问题。尝试创建调试报告回调时(验证层和调试扩展在我的英特尔 hd vulkan 驱动程序上可用,至少它是这么说的),它没有告诉我 vkCreateDeb
我是一名优秀的程序员,十分优秀!