2013-08-28 45 views
0

我遇到了問題,我無法在任何地方找到它。 所以我做這個測驗應用程序。而且我得到了我的mainactivity這裏:Arraylist不能與Android工作

public class MainActivity extends Activity { 

    List<Vragen> quesList; 
    int score=0; 
    int qid=0; 
    Vragen currentQ; 
    TextView txtVragen; 
    RadioButton rda, rdb, rdc; 
    Button butVolgende; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     DBHelper db=new DBHelper(this); 
     quesList=db.getAllVragen(); 
     currentQ=quesList.get(qid); 
     txtVragen=(TextView)findViewById(R.id.txtVraag); 
     rda=(RadioButton)findViewById(R.id.antwoord1); 
     rdb=(RadioButton)findViewById(R.id.antwoord2); 
     rdc=(RadioButton)findViewById(R.id.antwoord3); 
     butVolgende=(Button)findViewById(R.id.btnVolgende); 
     setVragenView(); 
     butVolgende.setOnClickListener(new View.OnClickListener() {  
      public void onClick(View v) { 
       RadioGroup grp=(RadioGroup)findViewById(R.id.grpAntwoord); 
       RadioButton antwoord=(RadioButton)findViewById(grp.getCheckedRadioButtonId()); 
       Log.d("yourans", currentQ.getANTWOORD()+" "+antwoord.getText()); 
       if(currentQ.getANTWOORD().equals(antwoord.getText())) 
       { 
        score++; 
        Log.d("score", "Your score"+score); 
       } 
       if(qid<5){     
        currentQ=quesList.get(qid); 
        setVragenView(); 
       }else{ 
        Intent intent = new Intent(MainActivity.this, ResultActivity.class); 
        Bundle b = new Bundle(); 
        b.putInt("score", score); //Your score 
        intent.putExtras(b); //Put your score to your next Intent 
        startActivity(intent); 
        finish(); 
       } 
      } 
     }); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
    private void setVragenView() 
    { 
     txtVragen.setText(currentQ.getVRAAG()); 
     rda.setText(currentQ.getOPT1()); 
     rdb.setText(currentQ.getOPT2()); 
     rdc.setText(currentQ.getOPT3()); 
     qid++; 
    } 
} 

這裏是我的DBHelper和問題都在那裏:

public class DBHelper extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 
    // Database Name 
    private static final String DATABASE_NAME = "DBQuiz"; 
    // tasks table name 
    private static final String TABLE_QUEST = "quest"; 
    // tasks Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_VRAAG = "vraag"; 
    private static final String KEY_ANTWOORD = "antwoord"; //correct option 
    private static final String KEY_OPT1= "opt1"; //option 1 
    private static final String KEY_OPT2= "opt2"; //option 2 
    private static final String KEY_OPT3= "opt3"; //option 3 
    private SQLiteDatabase dbase; 
    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     dbase=db; 
     String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_QUEST + " (" 
       + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_VRAAG 
       + " TEXT, " + KEY_ANTWOORD+ " TEXT, "+KEY_OPT1 +" TEXT, " 
       +KEY_OPT2 +" TEXT, "+KEY_OPT3+" TEXT)"; 
     db.execSQL(sql);   
     addVragen(); 
     //db.close(); 
    } 
    private void addVragen() 
    { 
     Vragen q1=new Vragen("Which company is the largest manufacturer" + 
       " of network equipment?","HP", "IBM", "CISCO", "CISCO"); 
     this.addVraag(q1); 
     Vragen q2=new Vragen("Which of the following is NOT " + 
       "an operating system?", "SuSe", "BIOS", "DOS", "BIOS"); 
     this.addVraag(q2); 
     Vragen q3=new Vragen("Which of the following is the fastest" + 
       " writable memory?","RAM", "FLASH","Register","Register"); 
     this.addVraag(q3); 
     Vragen q4=new Vragen("Which of the following device" + 
       " regulates internet traffic?", "Router", "Bridge", "Hub","Router"); 
     this.addVraag(q4); 
     Vragen q5=new Vragen("Which of the following is NOT an" + 
       " interpreted language?","Ruby","Python","BASIC","BASIC"); 
     this.addVraag(q5); 

    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUEST); 
     // Create tables again 
     onCreate(db); 
    } 
    // Adding new question 
    public void addVraag(Vragen quest) { 
     //SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_VRAAG, quest.getVRAAG()); 
     values.put(KEY_ANTWOORD, quest.getANTWOORD()); 
     values.put(KEY_OPT1, quest.getOPT1()); 
     values.put(KEY_OPT2, quest.getOPT2()); 
     values.put(KEY_OPT3, quest.getOPT3()); 
     // Inserting Row 
     dbase.insert(TABLE_QUEST, null, values);   
    } 
    public List<Vragen> getAllVragen() { 
     List<Vragen> quesList = new ArrayList<Vragen>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_QUEST; 
     dbase=this.getReadableDatabase(); 
     Cursor cursor = dbase.rawQuery(selectQuery, null); 
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Vragen quest = new Vragen(); 
       quest.setID(cursor.getInt(0)); 
       quest.setVRAAG(cursor.getString(1)); 
       quest.setANTWOORD(cursor.getString(2)); 
       quest.setOPT1(cursor.getString(3)); 
       quest.setOPT2(cursor.getString(4)); 
       quest.setOPT3(cursor.getString(5)); 
       quesList.add(quest); 
      } while (cursor.moveToNext()); 
     } 
     // return quest list 
     return quesList; 
    } 
    public int rowcount() 
    { 
     int row=0; 
     String selectQuery = "SELECT * FROM " + TABLE_QUEST; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     row=cursor.getCount(); 
     return row; 
    } 
} 

這裏是我的logcat:

08-28 14:33:58.440: W/dalvikvm(21832): threadid=1: thread exiting with uncaught exception (group=0x416e32a0) 
08-28 14:33:58.460: E/AndroidRuntime(21832): FATAL EXCEPTION: main 
08-28 14:33:58.460: E/AndroidRuntime(21832): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 
08-28 14:33:58.460: E/AndroidRuntime(21832): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at java.util.ArrayList.get(ArrayList.java:304) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at com.laurenswuytsjordipapen.cultural.pursuit.MainActivity$1.onClick(MainActivity.java:55) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at android.view.View.performClick(View.java:4262) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at android.view.View$PerformClick.run(View.java:17421) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at android.os.Handler.handleCallback(Handler.java:615) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at android.os.Looper.loop(Looper.java:137) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at android.app.ActivityThread.main(ActivityThread.java:4944) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at java.lang.reflect.Method.invokeNative(Native Method) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at java.lang.reflect.Method.invoke(Method.java:511) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
08-28 14:33:58.460: E/AndroidRuntime(21832): at dalvik.system.NativeStart.main(Native Method) 

任何人可以幫我我被卡住了,需要完成。

在此先感謝!

+0

能您在訪問列表之前以及在從getAllVragen方法中返回列表之前,請打印檢查大小的日誌。當你訪問索引1(意味着第二個元素),但大小是1,所以你應該訪問索引0 – Prateek

回答

1
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 

意味着您試圖獲取ArrayList中只有一個元素的第二個元素。因此,這意味着,當你做

quesList=db.getAllVragen(); 

你只得到一個結果

你只有一個記錄
+0

但我有5個問題,所以我不知道我錯在哪裏? – Laurenswuyts

+0

我不能直截了當地看到問題的存儲和檢索方式有什麼問題。如果你調用'rowcount()',你會得到什麼? – Simon

0

TABLE_QUEST表 您的QID更多的則是你的quesList

檢查quesList.size的大小()與qid 可能是qid = 2數組大小是1.

0

您可以打印日誌查看大小,然後訪問 列表,同時從getAllVragen方法返回列表。作爲 您正在訪問索引1(意味着第二個元素),但大小爲1,因此您 應訪問索引0。

對於離:Here is my program

import java.util.*; 

public class Test{ 

public static void main(String args[]){ 

List abc = new ArrayList(); 
abc.add("Meena"); 

    System.out.println("list element is : "+abc.get(1)); 
} 

} 

在上述程序名單大小爲1和訪問索引1(即2元素)。因此,我得到了下面的異常和你的一樣:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 
1 
     at java.util.ArrayList.rangeCheck(Unknown Source) 
     at java.util.ArrayList.get(Unknown Source) 
     at Test.main(Test.java:10) 

因此,在短期,

在列表第n個元素是由指數表示n-1個