2017-05-09 48 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」是否相同。 –

相關問題