java - SQLite 应用程序在显示数据时崩溃

标签 java android sqlite crash

我的应用程序是插入/更新/删除/显示数据库应用程序。到目前为止,我已经成功地开发了插入部分,但我的应用程序在尝试显示数据库内容时崩溃了,尽管它构建成功。

我有一个名为 DatabaseHelper 的单独 Activity ,另一个 Activity 是应在 ActionDialog 中显示数据的 Activity 。

当我点击 MainActivity 中的“显示数据”按钮时,它崩溃了

DatabaseHelper.java

public DatabaseHelper (Context context) {
    super (context, DATABASE_NAME, null, 1);
    //SQLiteDatabase db = this.getWritableDatabase();
}

...

public Cursor getAllData(){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM "+TABLE_NAME, null);
    return res;
}

和Activity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pregled);

    buttonPregled = (Button)findViewById(R.id.BtnPregled);
    viewAll();
}

//
public void viewAll(){
    buttonPregled.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Cursor res = myDb.getAllData();
            if(res.getCount() == 0){
                //show message
                showMessage("Error", "Table empty");
                return;
            }

            StringBuffer buffer = new StringBuffer();
            while (res.moveToNext()){
                buffer.append("ID:"+ res.getString(0)+"\n");
                buffer.append("Naslov:"+ res.getString(1)+"\n");
                buffer.append("Datum:"+ res.getString(2)+"\n");
                buffer.append("Kontakt osoba:"+ res.getString(3)+"\n");
                buffer.append("Kontakt broj:"+ res.getString(4)+"\n");
                buffer.append("Lokacija:"+ res.getString(5)+"\n");
                buffer.append("Pogodba:"+ res.getString(6)+"\n");
                buffer.append("Zarada:"+ res.getString(7)+"\n\n");
            }

            //Show all data
            showMessage("Svirke", buffer.toString());
        }
    });
}

public void showMessage (String title, String Message){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setTitle(title);
    builder.setMessage(Message);
    builder.show();
}

堆栈跟踪

05-09 15:20:07.935 4137-4137/com.example.vramba.evis17 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.example.vramba.evis17, PID: 4137
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.vramba.evis17/com.example.vramba.evis17.PregledActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
                                                                         at android.app.ActivityThread.access$900(ActivityThread.java:177)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:145)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5951)
                                                                         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 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                         at com.example.vramba.evis17.PregledActivity.viewAll(PregledActivity.java:25)
                                                                         at com.example.vramba.evis17.PregledActivity.onCreate(PregledActivity.java:20)
                                                                         at android.app.Activity.performCreate(Activity.java:6289)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) 
                                                                         at android.app.ActivityThread.access$900(ActivityThread.java:177) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:145) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5951) 
                                                                         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) 

最佳答案

试试这个:

Cursor res = myDb.getAllData();
res.moveToFirst(); // OR you can also write res.moveToPosition(0);
if(res.getCount() == 0)
{
   //show message
   showMessage("Error", "Table empty");
   return;
}

如果您的数据库已正确初始化,那么此操作将起作用,因此在此之前初始化您的数据库。

关于java - SQLite 应用程序在显示数据时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870589/

相关文章:

java - Arrays.asList() 创建的 List 上的 remove() 抛出 UnsupportedOperationException

android - Cocos2d-x 应用程序无法为 Android 编译

java - 如何在 2 月 28 日在 android 中添加 1 个月

java - 在 JSP 中获取通过 jQuery ajax POST 传递的多值参数

java - DexGuard - 使用 Robolectric 加密类 NullPointerException

android - 嵌套的 TextView(ConstraintLayout --> LinearLayout)仅在编辑器中可见

java - Android 后退按钮不返回到上一个 Activity

php - 有效地查找表中不存在的第一个数字?

iphone - 我可以将 sqlite db 作为 zip 文件存储在 iPhone 应用程序中吗

java - Android如何在数据库帮助器类之外将数据插入数据库