Android 当我实例化SQLiteOpenHelper的子类时,应用程序不会';开始
我从android开发开始,当我实例化我的SQLiteOpenHelper子类时,我遇到了一个问题,因为当我这样做时,我的应用程序simple不会启动 这是我的活动Android 当我实例化SQLiteOpenHelper的子类时,应用程序不会';开始,android,sqlite,Android,Sqlite,我从android开发开始,当我实例化我的SQLiteOpenHelper子类时,我遇到了一个问题,因为当我这样做时,我的应用程序simple不会启动 这是我的活动 package com.almostGames.sera; import android.os.Bundle; import android.app.Activity; import android.support.v4.view.ViewPager; import android.view.View; import androi
package com.almostGames.sera;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class SeraActivity extends Activity {
Button btJogar, btPlacares, btDesafios, btHP;
ImagensDbHelper mDbHelper = new ImagensDbHelper(getApplicationContext());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
chamarTela1(); //metodo que chama a tela1
}
public void chamarTela1() {
setContentView(R.layout.home); //chama a tela
btJogar = (Button) findViewById(R.id.btnJogar);
btJogar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chamarTela2(); // Chama a tela2 ao clicar no botao
}
});
}
public void chamarTela2() {
setContentView(R.layout.seleciona_livros); //chama a tela
ViewPager galeria = (ViewPager) findViewById(R.id.galeria);
GaleriaImagensAdapter adapter = new GaleriaImagensAdapter(this);
galeria.setAdapter(adapter);
}
}
这是我的合同课
package com.almostGames.sera;
import android.database.sqlite.*;
import android.provider.BaseColumns;
public final class ImagensContrato {
// Construtor vazio
public ImagensContrato() {}
/* Definição do conteúdo da tabela*/
public static abstract class ImagensEntry implements BaseColumns {
public static final String TABLE_NAME = "imagens";
}
private String SQL_CREATE_ENTRIES =
"CREATE TABLE sera " +
" (_id INTEGER(11) NOT NULL," +
" livro VARCHAR(25) NOT NULL," +
" resposta VARCHAR(30) NOT NULL," +
" acertou INTEGER(11) NOT NULL," +
" localizacao BLOB," +
" PRIMARY KEY (_id)," +
" UNIQUE (_id))";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + ImagensEntry.TABLE_NAME;
public String getSqlCreateEntries() {
return SQL_CREATE_ENTRIES;
}
public String getSqlDeleteEntries() {
return SQL_DELETE_ENTRIES;
}
}
这是我的数据库助手
package com.almostGames.sera;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class ImagensDbHelper extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "sera.db";
ImagensContrato contrato = new ImagensContrato();
public ImagensDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(contrato.getSqlCreateEntries());
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(contrato.getSqlDeleteEntries());
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
这是个例外
08-27 22:26:06.784: E/AndroidRuntime(25370): FATAL EXCEPTION: main
08-27 22:26:06.784: E/AndroidRuntime(25370): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.almostGames.sera/com.almostGames.sera.SeraActivity}: java.lang.NullPointerException
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2178)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.ActivityThread.access$700(ActivityThread.java:141)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.os.Looper.loop(Looper.java:137)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.ActivityThread.main(ActivityThread.java:5118)
08-27 22:26:06.784: E/AndroidRuntime(25370): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 22:26:06.784: E/AndroidRuntime(25370): at java.lang.reflect.Method.invoke(Method.java:511)
08-27 22:26:06.784: E/AndroidRuntime(25370): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
08-27 22:26:06.784: E/AndroidRuntime(25370): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
08-27 22:26:06.784: E/AndroidRuntime(25370): at dalvik.system.NativeStart.main(Native Method)
08-27 22:26:06.784: E/AndroidRuntime(25370): Caused by: java.lang.NullPointerException
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
08-27 22:26:06.784: E/AndroidRuntime(25370): at com.almostGames.sera.SeraActivity.<init>(SeraActivity.java:15)
08-27 22:26:06.784: E/AndroidRuntime(25370): at java.lang.Class.newInstanceImpl(Native Method)
08-27 22:26:06.784: E/AndroidRuntime(25370): at java.lang.Class.newInstance(Class.java:1319)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
08-27 22:26:06.784: E/AndroidRuntime(25370): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2055)
08-27 22:26:06.784: E/AndroidRuntime(25370): ... 11 more
08-27 22:26:06.784:E/AndroidRuntime(25370):致命异常:主
08-27 22:26:06.784:E/AndroidRuntime(25370):java.lang.RuntimeException:无法实例化活动组件信息{com.almostGames.sera/com.almostGames.sera.SeraActivity}:java.lang.NullPointerException
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2178)
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.app.ActivityThread.access$700(ActivityThread.java:141)
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.os.Looper.loop(Looper.java:137)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于android.app.ActivityThread.main(ActivityThread.java:5118)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于java.lang.reflect.Method.invoke(Method.java:511)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
8-27 22:26:06.784:E/AndroidRuntime(25370):在dalvik.system.NativeStart.main(本机方法)
08-27 22:26:06.784:E/AndroidRuntime(25370):由以下原因引起:java.lang.NullPointerException
08-27 22:26:06.784:E/AndroidRuntime(25370):位于android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
08-27 22:26:06.784:E/AndroidRuntime(25370):在com.almostGames.sera.SeraActivity。(SeraActivity.java:15)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于java.lang.Class.newInstanceImpl(本机方法)
08-27 22:26:06.784:E/AndroidRuntime(25370):位于java.lang.Class.newInstance(Class.java:1319)
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.app.Instrumentation.newActivity(Instrumentation.java:1053)上
08-27 22:26:06.784:E/AndroidRuntime(25370):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2055)
2008-27 22:26:06.784:E/AndroidRuntime(25370):。。。还有11个
我正在做这个教程(),但是当我实例化我的DbHelper时,应用程序不会启动
PS:我收到信息:“不幸的是,我已经停止了”
此行崩溃,getApplicationContext()返回null,因为它是在onCreate()方法之前调用的,并且活动尚未创建。因此,尝试将此初始化移到onCreate()方法中,如下所示:
ImagensDbHelper mDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
mDbHelper = new ImagensDbHelper(getApplicationContext());
chamarTela1(); //metodo que chama a tela1
}
您是否收到“不幸的是,我的应用程序已停止”?是的。我收到消息:“不幸的是,已停止>。您能在stacktrace中发布异常吗?对不起,这是我的第一个问题。但我现在已附加了执行选项。在
onCreate()
中初始化mDbHelper
。也就是说,将mDbHelper=new imagesDBHelper(getApplicationContext())
移动到那里。
ImagensDbHelper mDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
mDbHelper = new ImagensDbHelper(getApplicationContext());
chamarTela1(); //metodo que chama a tela1
}