2017-05-09 51 views
-2

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

我有一个单独的活动,名为DatabaseHelper,另一个是应该在ActionDialog中显示数据的地方。

它崩溃时,我打 “显示数据” 按钮,这是我的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(); 
} 

S钉痕迹

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)  
+0

把你的堆栈跟踪放在这里 –

+0

如果我们不知道你的代码部分崩溃了,我们该如何帮助你? – Denny

+0

@LuizFernandoSalvaterra我该怎么做,究竟在哪里找到它? –

回答

0

试试这个:

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; 
} 

如果你的DB是正确初始化那么这个工作,所以之前执行此初始化数据库。

+0

仍然崩溃,我搞砸了viewAll类,与“尝试对空对象引用调用虚方法”错误,但我不知道是什么。 –

+0

@MikeLitoris请验证layout.xml中的“R.id.BtnPregled”是否相同。 –

相关问题