Java Android-应用程序无法启动活动组件信息
我目前正在学习Android编程。我知道这个错误在这个论坛上出现了数百万次,但请帮我找到我错过的 问题是,当我在android emulator上运行我的应用程序时,应用程序崩溃并显示弹出窗口:“不幸的是,数据Mahasiswa已停止。” 以下是整个logcat堆栈跟踪:Java Android-应用程序无法启动活动组件信息,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我目前正在学习Android编程。我知道这个错误在这个论坛上出现了数百万次,但请帮我找到我错过的 问题是,当我在android emulator上运行我的应用程序时,应用程序崩溃并显示弹出窗口:“不幸的是,数据Mahasiswa已停止。” 以下是整个logcat堆栈跟踪: 06-11 17:50:52.203 1700-1700/com.example.user.tugasss I/art: Late-enabling -Xcheck:jni 06-11 17:50:52.203 1700-17
06-11 17:50:52.203 1700-1700/com.example.user.tugasss I/art: Late-enabling -Xcheck:jni
06-11 17:50:52.203 1700-1700/com.example.user.tugasss W/art: Unexpected CPU variant for X86 using defaults: x86
06-11 17:50:52.783 1700-1700/com.example.user.tugasss W/System: ClassLoader referenced unknown path: /data/app/com.example.user.tugasss-1/lib/x86
06-11 17:50:53.324 1700-1700/com.example.user.tugasss D/AndroidRuntime: Shutting down VM
06-11 17:50:53.325 1700-1700/com.example.user.tugasss E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.tugasss, PID: 1700
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.tugasss/com.example.user.tugasss.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(int)' on a null object reference
at com.example.user.tugasss.MainActivity.setFragmentTitle(MainActivity.java:111)
at com.example.user.tugasss.MainActivity.onCreate(MainActivity.java:52)
at android.app.Activity.performCreate(Activity.java:6664)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
DataBaseHelper.java
package com.example.user.tugasss;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mahasiswadb";
private static final int DATABASE_VERSION = 1;
public static final String TABEL_MAHASISWA = "mahasiswa";
public static final String TABEL_ANGKATAN = "angkatan";
public static final String ID = "id";
public static final String NAMA = "nama";
public static final String TANGGAL_LAHIR = "tgllahir";
public static final String JURUSAN = "jurusan";
public static final String ANGKATAN = "agt_id";
public static final String CREATE_TABEL_MAHASISWA = "CREATE TABLE IF NOT EXISTS "
+ TABEL_MAHASISWA + "(" + ID + " INTEGER PRIMARY KEY, "
+ NAMA + " TEXT, " + JURUSAN + " TEXT, "
+ TANGGAL_LAHIR + " DATE, " + ANGKATAN + "INT, " + "FOREIGN KEY(" + ANGKATAN + ") REFERENCES "
+ TABEL_ANGKATAN + " (id) " + ");";
public static final String CREATE_TABEL_ANGKATAN = "CREATE TABLE IF NOT EXISTS "
+ TABEL_ANGKATAN + "(" + ID + " INTEGER PRIMARY KEY,"
+ NAMA + " TEXT"+");";
private static DataBaseHelper instance;
public static synchronized DataBaseHelper getHelper(Context context) {
if (instance == null)
instance = new DataBaseHelper(context);
return instance;
}
private DataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onOpen(SQLiteDatabase db)
{
super.onOpen(db);
if (!db.isReadOnly()){
//enable foreign key constraints
db.execSQL("PRAGMA foreign_keys=ON;");
}
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABEL_ANGKATAN);
db.execSQL(CREATE_TABEL_MAHASISWA);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
MainActivity.java
package com.example.user.tugasss;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import com.example.user.tugasss.CustomDialogFragment.DialogFragmentListener;
public class MainActivity extends FragmentActivity implements DialogFragmentListener {
private Fragment contentFragment;
private ListFragment mahasiswaListFragment;
private AddFragment mahasiswaAddFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getSupportFragmentManager();
AngkatanDAO agtDAO = new AngkatanDAO(this);
//angkatans
if(agtDAO.getAngkatans().size() <= 0)
agtDAO.loadAngkatans();
/*
* This is called when orientation is changed.
*/
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("content")) {
String content = savedInstanceState.getString("content");
if (content.equals(AddFragment.ARG_ITEM_ID)) {
if (fragmentManager
.findFragmentByTag(AddFragment.ARG_ITEM_ID) != null) {
setFragmentTitle(R.string.add_mhs);
contentFragment = fragmentManager
.findFragmentByTag(AddFragment.ARG_ITEM_ID);
}
}
}
if (fragmentManager.findFragmentByTag(ListFragment.ARG_ITEM_ID) != null) {
mahasiswaListFragment = (ListFragment) fragmentManager
.findFragmentByTag(ListFragment.ARG_ITEM_ID);
contentFragment = mahasiswaListFragment;
}
} else {
mahasiswaListFragment = new ListFragment();
setFragmentTitle(R.string.app_name);
switchContent(mahasiswaListFragment, ListFragment.ARG_ITEM_ID);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
if (contentFragment instanceof AddFragment) {
outState.putString("content", AddFragment.ARG_ITEM_ID);
} else {
outState.putString("content", ListFragment.ARG_ITEM_ID);
}
super.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
setFragmentTitle(R.string.add_mhs);
mahasiswaAddFragment = new AddFragment();
switchContent(mahasiswaAddFragment, AddFragment.ARG_ITEM_ID);
return true;
}
return super.onOptionsItemSelected(item);
}
/*
* We consider EmpListFragment as the home fragment and it is not added to
* the back stack.
*/
public void switchContent(Fragment fragment, String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
while (fragmentManager.popBackStackImmediate())
;
if (fragment != null) {
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.content_frame, fragment, tag);
if (!(fragment instanceof ListFragment)) {
transaction.addToBackStack(tag);
}
transaction.commit();
contentFragment = fragment;
}
}
protected void setFragmentTitle(int resourseId) {
setTitle(resourseId);
getActionBar().setTitle(resourseId);
}
/*
* We call super.onBackPressed(); when the stack entry count is > 0. if it
* is instanceof EmpListFragment or if the stack entry count is == 0, then
* we prompt the user whether to quit the app or not by displaying dialog.
* In other words, from EmpListFragment on back press it quits the app.
*/
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
super.onBackPressed();
} else if (contentFragment instanceof ListFragment
|| fm.getBackStackEntryCount() == 0) {
//tampilkan dialog ketika keluar
onShowQuitDialog();
}
}
public void onShowQuitDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setMessage("Anda Ingin Keluar?");
builder.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
builder.setNegativeButton(android.R.string.no,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
@Override
public void onFinishDialog() {
if (mahasiswaListFragment != null) {
mahasiswaListFragment.updateView();
}
}
}
package com.example.user.tugass;
导入android.app.AlertDialog;
导入android.content.DialogInterface;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentActivity;
导入android.support.v4.app.FragmentManager;
导入android.support.v4.app.FragmentTransaction;
导入android.view.Menu;
导入android.view.MenuItem;
导入com.example.user.tugasss.CustomDialogFragment.DialogFragmentListener;
公共类MainActivity扩展FragmentActivity实现DialogFragmentListener{
私有片段内容片段;
私有ListFragment-mahasiswaListFragment;
私有AddFragment-mahasiswaAddFragment;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager FragmentManager=getSupportFragmentManager();
AngkatanDAO agtDAO=新的AngkatanDAO(本);
//安加达人
如果(agtDAO.getAngkatans().size()0
*是instanceof EmpListFragment,或者如果堆栈项计数==0,则
*我们通过显示对话框提示用户是否退出应用程序。
*换句话说,从背面的EmpListFragment按它退出应用程序。
*/
@凌驾
public void onBackPressed(){
FragmentManager fm=getSupportFragmentManager();
if(fm.getBackbackEntryCount()>0){
super.onBackPressed();
}else if(ListFragment的contentFragment实例
||fm.getBackbackEntryCount()==0){
//坦皮尔坎对话
onShowQuitDialog();
}
}
公共void onShowQuitDialog(){
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setCancelable(false);
builder.setMessage(“Anda Ingin Keluar?”);
builder.setPositiveButton(android.R.string.yes,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface对话框,int-id){
完成();
}
});
builder.setNegativeButton(android.R.string.no,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
dialog.cancel();
}
});
builder.create().show();
}
@凌驾
public void onFinishDialog(){
if(mahasiswaListFragment!=null){
mahasiswaListFragment.updateView();
}
}
}
有人能帮我解决这个问题吗?这里使用这些字符串创建您的表: 我不确定您上一个参数TABEL_ANGKATAN想要什么,所以如果您想要其他相应的更改,我现在将其作为文本
public static final String CREATE_TABEL_MAHASISWA = "CREATE TABLE IF NOT EXISTS "
+ TABEL_MAHASISWA + "(" + ID + " INTEGER PRIMARY KEY, "
+ NAMA + " TEXT, " + JURUSAN + " TEXT, "
+ TANGGAL_LAHIR + " DATE" + ")"
+ TABEL_ANGKATAN + " TEXT"+");";
//corrected the second query as it was incomplete
public static final String CREATE_TABEL_ANGKATAN = "CREATE TABLE IF NOT EXISTS "
+ TABEL_ANGKATAN + "(" + ID + " INTEGER PRIMARY KEY,"
+ NAMA + " TEXT"+");";
使用这些将删除您当前遇到的错误了解如何调试和读取错误消息。查看错误消息中的create table SQL语句,您将看到您编写的create table字符串错误。您的SQL查询无效。您必须更正它。嘿,谢谢您的帮助。但是我遇到了另一个错误。您能帮助我吗又是我吗?请阅读错误,这是一个空指针异常,您正在设置操作栏标题。您的操作栏为空,请先初始化它,然后为操作栏设置标题