2015-10-14 56 views
0

我需要在我的應用程序中顯示異常作爲吐司消息,但下面的代碼不工作,我該如何修改?在android中的異常處理

public void onClick(View v) { 
     try { 
      if (btn66 == v) { 
       ContentValues value = new ContentValues(); 
       value.put(DBhelper.Amount, txtBudget.getText().toString()); 
       value.put(DBhelper.Description, txr.getText().toString()); 

       if (txtBudget.length() == 0) { 
        txtBudget.requestFocus(); 
        txtBudget.setError("Field Cannot Be Empty"); 
       } else { 

        db = helper.getWritableDatabase(); 
        db.insert(DBhelper.TABLE2, null, value); 
        db.close(); 
        clearfield(); 
        Toast.makeText(this, "Budget add Successfully", Toast.LENGTH_LONG).show(); 
        fetchData2(); 
       } 
      } 
     } 
     catch (Exception sce) 
     { 
      Toast.makeText(this, "Error duplicate", Toast.LENGTH_LONG).show(); 
      System.out.println(sce.getMessage()); 

     } 
    } 

10-14 23:41:21.637 14498-14498/com.example.username.weddingplanning E/SQLiteDatabase:錯誤插入名= d android.database.sqlite.SQLiteConstraintException:列名稱是不是唯一的(代碼19) 在android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(母語 方法) 在android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:968) 在android.database.sqlite.SQLiteSession。 executeForLastInsertedRowId(SQLiteSession.java:788) at andro在android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:SQLiteDatabase.java)中使用的ID.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) (位於android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1575) : 1445) at com.example.username.weddingplanning.addcategory.onClick(addcategory.java:67) at android.view.View.performClick(View.java:4439) at android.view.View $ PerformClick.run( View.java:18398) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper。 java:176) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang方法.invokeNative(本地方法) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 在dalvik.system.NativeStart.main(本機方法)

+0

你在做什麼? –

+0

顯示得到的結果 –

+0

我沒有在吐司中得到任何錯誤消息,但在logcat中,異常錯誤細節即將到來。 – xyz

回答

3

您可以從構造函數的吐司文檔看你重新使用:

public static Toast makeText (Context context, CharSequence text, int duration) 

Parameters 
    context  The context to use. Usually your Application or Activity object. 
    text  The text to show. Can be formatted text. 
    duration How long to display the message. Either LENGTH_SHORT or LENGTH_LONG 

第一個參數是Context

你正在通過this編輯:這可能不是正確的Context從中可以構造Toast

您需要通過它ActivityApplicationContext才能正常工作。

+0

我也嘗試過,仍然沒有給予例外吐司消息。 – xyz

+0

它會在成功時顯示「預算添加成功」消息,但異常時不顯示「錯誤重複」消息? – AnxGotta

+0

是的,如果我還添加重複值,它顯示成功消息「預算添加成功」(即使它顯示成功消息,重複值不會被添加到數據庫) – xyz

0

你必須通過YourActivity.this在第一論吐司。

例子:

Toast.makeText(YourActivity.this, "Your Message", Toast.LENGTH_LONG).show(); 
+0

我也是這樣試過的,仍然沒有給出異常吐司消息,它給予成功消息爲「成功添加」。但它沒有被添加到數據庫中。 – xyz

+0

我認爲catch塊不會顯示Toast消息,所以你必須保持'true'或'false',並且在catch塊之後你可以根據需要顯示Toast。 –

0

最好是檢查插入語句的結果代碼。 插入語句總是返回新插入行的行ID,如果發生錯誤,則返回-1。

+0

因此'int result = db.insert(DBhelper.TABLE2,null,value);'then? – Teepeemm

+0

if(result == -1){show error} else {do your work} –