2014-10-18 68 views
0

在我actiivty,我創建了多個複選框的項目就是這樣,其中的複選框的文字是從我的SQLite數據庫設置條件,在android系統

finaldb.open(); 
      String[] db_data = finaldb.getdbdata(sensIds[i]); 
      finaldb.close(); 
    for (int j = 0; j < db_data.length; j++) { 
         cb = new CheckBox(getApplicationContext()); 
         cb.setButtonDrawable(id); 
         cb.setText(db_data[j]); 
         mainLayout.addView(cb); 
       } 

未來現在,我想在設置條件我的按鈕,如果任何複選框被選中,activityA應該被啓動,或者在其他情況下,activityB將被啓動。 我試圖像這樣做,

if(cb.isChecked()) { 

//ActivityA start 
} 
else { 

//ActivityB start 
} 

但它給我IndexOutOfBoundExceptionError。任何人都可以幫助我在正確的方向嗎?

編輯: 當我刪除我的if else條件並僅與ActivityA一起使用時,代碼工作得非常好,但是當使用此if else條件時,它只考慮else條件並每次啓動ActivityB。

這裏是我的logcat報告,

10-18 15:10:33.065: E/AndroidRuntime(1138): FATAL EXCEPTION: main 
10-18 15:10:33.065: E/AndroidRuntime(1138): Process: com.example.mydb, PID: 1138 
10-18 15:10:33.065: E/AndroidRuntime(1138): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at java.util.ArrayList.get(ArrayList.java:308) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at com.example.mydb.FinalActivity.onClick(FinalActivity.java:219) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at android.view.View.performClick(View.java:4438) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at android.view.View$PerformClick.run(View.java:18422) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at android.os.Handler.handleCallback(Handler.java:733) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at android.os.Handler.dispatchMessage(Handler.java:95) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at android.os.Looper.loop(Looper.java:136) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
10-18 15:10:33.065: E/AndroidRuntime(1138):  at dalvik.system.NativeStart.main(Native Method) 
+0

此代碼是誤導...之間的字符串聲明和循環是你的SQL查詢,不是嗎?否則很明顯,db_data尚未初始化! – 2014-10-18 18:31:01

+0

cb = new CheckBox(getApplicationContext());而是嘗試cb = new CheckBox(this); – 2014-10-18 18:36:18

+0

@SuhailMehta試過了,它沒有工作 – 2014-10-18 20:44:40

回答

1

好的,如果您有多個屬於同一系列的複選框,並且您希望應用條件(如果其中任何一個已選中),則ActivityA應該啓動。 你可以嘗試這樣的事情,

for (int i = 0; i < mainLayout.getChildCount(); i++) { 
        if (mainLayout.getChildAt(i) instanceof CheckBox) { 
         CheckBox cb = (CheckBox) mainLayout.getChildAt(i); 
         if (cb.isChecked()) { 
         //Start ActivityA 
          } 
         else { 
         //Start ActivityB 
         } 
+1

從您的答案中,我得到一個提示,我應該設置一個布爾變量,如果任何複選框被選中,設置它爲真,然後最後根據布爾變量狀態,我可以啓動我的ActivtyA或ActivityB。但有點困惑我應該如何實現這一點? – 2014-10-20 15:39:24

+0

最後,在你的回答幫助下,我讓我的'if-else'條件起作用,非常感謝! – 2014-10-20 16:17:27

-1

我同意,使用斷點來檢查循環的每個迭代,看看數據是每個索引。也許你的getdbdata()方法有錯誤?

您是否仍然在複選框檢查上啓動活動時遇到問題?

+0

是的,問題還沒有解決。我檢查了我的查詢,一切似乎都很好,但錯誤仍然存​​在 – 2014-10-18 19:54:24

+0

IndexOutOfBounds或NullBoundExceptionError? – 2014-10-18 20:04:47

+0

IndexOutOfBoundException – 2014-10-18 20:07:21

0

檢查String[] db_data = finaldb.getdbdata(sensIds[i]);

誤差幾乎可以肯定有

注重通過

.getdbdata(sensIds[i]);` 

錯誤返回的值是相對於ArrayList一個只有2個元素,但你的代碼試試訪問位置2中的元素:第三個不存在的元素。

+0

你說得對,ArrayList有問題。 indexOutOfBoundException現在已經解決了,但是每次我運行應用程序,它的唯一啓動activityB,並沒有考慮我的「if」條件時,我的條件出現問題。 – 2014-10-19 05:08:04

0

@colonelcode,如果有與按鈕聽衆的問題,那麼即使ActivityB就不會啓動。上司:沒有足夠的聲望寫評論,所以我必須寫在一個單獨的答案。