- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个使用存储特定信息的数据库的项目。数据库对部分程序有效,但对其他程序则无效。当用户第一次启动程序时,他们将看到从数据库中提取的信息,并且他们还可以选择添加新信息。数据库对于这两者都工作得很好。
我遇到的问题是在另一个添加信息的地方。当我打开数据库时,我的程序崩溃了。日志:
08-29 20:22:47.000: E/AndroidRuntime(3022): FATAL EXCEPTION: main
08-29 20:22:47.000: E/AndroidRuntime(3022): java.lang.NullPointerException
08-29 20:22:47.000: E/AndroidRuntime(3022): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
08-29 20:22:47.000: E/AndroidRuntime(3022): at android.database.sqlite.SQLiteOpenHelper._getWritableDatabase(SQLiteOpenHelper.java:164)
08-29 20:22:47.000: E/AndroidRuntime(3022): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:100)
08-29 20:22:47.000: E/AndroidRuntime(3022): at peices.DbM.open(DbM.java:173)
08-29 20:22:47.000: E/AndroidRuntime(3022): at peices.NewStuff.CreateNewUnit(NewStuff.java:27)
08-29 20:22:47.000: E/AndroidRuntime(3022): at carlson.msum.arch.Site$5.onClick(Site.java:231)
08-29 20:22:47.000: E/AndroidRuntime(3022): at android.view.View.performClick(View.java:2538)
NewStuff 代码:27(第 20-30 行):
bb=Lon.getText().toString();
cc=UnitName.getText().toString();
Log.d("Class",aa);
Log.d("Class",bb);
Log.d("Class",cc);
Log.d("Class",SiteName);
Log.d("Stuff","Before Open");
**db.open();**
Log.d("Stuff","Before Insert/After Open");
db.InsertUnit(SiteName, cc, aa, bb);
Log.d("Stuff","Before Close/After Insert");
db.close();
DbM.java 代码:173(170-176)
public DbM open() throws SQLException
{
Log.d("BmDb","open");
**db= DbMh.getWritableDatabase();**
Log.d("BmDb","Open before return");
return this;
}
我已经知道它与数据库的打开有关,但为什么它会打开并为其他 Activity 工作,但不是这个?我检查了在此之前的所有 Activity ,并且我确实关闭了所有数据库。
这是类(class)的开始,DbM 初始化是我为所有其他类(class)所做的。
public class NewStuff extends Activity {
Context context;
**DbM db=new DbM(this);**
可能是这样,但不确定如何解决它,这是我在程序其他部分中使用的一类对象。所以我没有调用任何 oncreates 或类似的东西,这会导致我的问题吗?
*编辑*
这是我的整个 NewStuff 类(class),除了上下文之外,我一定还缺少其他东西,因为似乎没有任何效果。
package peices;
import peices.DbM;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.app.Activity;
import android.content.Context;
public class NewStuff extends Activity {
Context context;
DbM db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db=new DbM(this);
}
public void CreateNewUnit(EditText Lat, EditText Lon, EditText UnitName, String SiteName)
{
db=new DbM(this);
Log.d("NewUnit","Start of");
String aa="";
String bb="";
String cc="";
aa=Lat.getText().toString();
bb=Lon.getText().toString();
cc=UnitName.getText().toString();
Log.d("Class",aa);
Log.d("Class",bb);
Log.d("Class",cc);
Log.d("Class",SiteName);
Log.d("Stuff","Before Open");
db.open();
Log.d("Stuff","Before Insert/After Open");
db.InsertUnit(SiteName, cc, aa, bb);
Log.d("Stuff","Before Close/After Insert");
db.close();
}
编辑
调用NewStuff的onclick函数
ucreate.setOnClickListener(new OnClickListener(){
public void onClick(View m){
Log.d("Ubox","Unit Name: "+uname.getText().toString());
Log.d("Ubox","Unit Longitude: "+ulon.getText().toString());
Log.d("Ubox","Unit Latitude: "+ulat.getText().toString());
Log.d("Ubox","Site Name: "+SiteName);
NewStuff ns= new NewStuff();
ns.CreateNewUnit(ulat,ulon,uname,SiteName);
Intent I= new Intent(Site.this, Site.class);
I.putExtra("SITE", SiteName);
startActivity(I);
最佳答案
您无法将 DbM 初始化为字段,因为上下文尚未初始化
DbM db=new DbM(this);
调用
db=new DbM(this);
仅在 OnCreate 中或之后。
编辑:你不能打电话
NewStuff ns= new NewStuff()
这是因为如果您实例化自己,则不会设置 Activity 的上下文。因此,new DbM(this); 中的 this
将没有任何意义。
主要是,您通常不应该从另一个 Activity 调用一个 Activity 函数。
关于java - getWritableDatabase 导致 nullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12188879/
我想在手机不在覆盖区域时存储一些数据。当服务恢复时,它将在服务器上上传数据。但数据没有插入。我在网上查了很多教程。但一直都一样。应用程序意外关闭。 LogCat 错误 10-12 12
我正在为 android 应用程序编写一个函数,它可以通过导入最新的 csv 文件来更新 sqlite 数据库。当用户单击该按钮时,程序应该删除旧表并根据最新数据创建另一个新表。第一次按下按钮时,应用
我正在创建一个名为 Mycontacts 的应用程序。这与 youtube 上的视频相同( https://www.youtube.com/watch?v=38DOncHIazs )。 但是这个get
据我所知,调用 SqliteOpendHelper.getWritableDatabase() 总是返回相同的 SQLiteDatabase 实例。那么与之关联的交易是否也不会受到影响? 假设一个单线
我在调用 getWritableDatabase() 时遇到问题。它返回 NullPointerException。最奇怪的是,这个错误是在我注释掉我的 android list 中的几行代码之后才开
我有一个具有以下代码的服务类 - public class ReminderService extends WakeReminderIntentService{ private st
我有一个关于 android 中的 sqlite 数据库的新手问题: 我真的需要在每次操作数据时都检索一个可写数据库吗? 那么我可以这样写一个 DAO 吗: class Dao { p
我正在尝试使用以下代码更新我的数据库表: public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
文档位于 http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritabl
我正在开发一个使用存储特定信息的数据库的项目。数据库对部分程序有效,但对其他程序则无效。当用户第一次启动程序时,他们将看到从数据库中提取的信息,并且他们还可以选择添加新信息。数据库对于这两者都工作得很
好吧,所以我一直在搜索这个问题,我找到了几个我尝试过但没有成功的答案。我注意到,如果我注释掉 getWritableDatabase,应用程序不会崩溃,但它不会完成我想要的操作。 我还引用了这个vid
我正在开发我的第一个 SQLite 数据库应用程序,因为我被困了很长时间,所以我决定在线询问。 由于以下函数,我无法运行我编写的应用程序:Helper.getWritableDatabase(); 没
我正在尝试在我的应用程序中创建与 sqlite 的连接,但是如果我执行该应用程序,在 getWritableDatabase 行中,应用程序将强制关闭,我不明白发生了什么。 DBCore 类: pub
我已经让 Singelton 对象对 SQLiteOpenHelper 进行查询,我在其中保存了 getWriteableDatabase() 的实例。在整个应用程序生命周期中,对于所有 select
我在调用 getWritableDatabase() 时遇到问题。它返回 NullPointerException。最奇怪的是,这个错误是在我注释掉我的 android list 中的几行代码之后才开
此处为 Android 新手。我制作了一个新的 Fragments 应用程序,但无法从 Fragment 访问数据库。 这是类: public class ShopListActivity exten
我有这个代码: // 2. get reference to writable DB SQLiteDatabase db = this.getWritableDatabase(); Cursor cu
更新 当我尝试从 Activity 调用方法时出现错误: SQLiteDatabase db = null; List r = dbHelper.getAllAlbum(db); 在我的 dbHel
这是我尝试访问数据库的地方: UserDataAdapter dbHelper = new UserDataAdapter(this); dbHelper.open(); dbHelper.creat
我经常收到用户报告此错误。 无法获取可写数据库。 try { //dbOpenHelper is a standard SQLiteOpenHelper dbOpenH
我是一名优秀的程序员,十分优秀!