2013-02-14 48 views
-1

我在QuestionView.java中填充ArrayList<Long>。我将它传递给Results.java,然后在Results.java类中的dialog中调用ArrayList<Long>对于ArrayList中的IndexOutOfBoundsException - Android

让我知道如果这没有意义,我会尝试进一步澄清。所有代码和LogCat输出如下。先谢谢你!

QuestionView.java

public class QuestionView extends Activity { 

    ArrayList<Long> pointsPerQuestion = new ArrayList<Long>(10); 

    public void onCreate(Bundle savedInstanceState) { 
     .... 
    } 

public ArrayList<Long> getPointsPerQuestion() { 
    return pointsPerQuestion; 
} 

public void nextQuestion() { 
    pointsPerQuestion.add(points); 
    score = score + points; 
    i++; 
    loadQuestion(); 
} 

public class Timer extends CountDownTimer {  
    @Override 
    public void onFinish() { 
     ... 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     bar.setProgress((int) millisUntilFinished); 
     points = (millisUntilFinished/100)/2; 
     timeremaining.setText("Points remaining: " + points); 
     if(i < 10) { 
      questionNumber.setText("Question " + (i + 1) + " of 10"); 
     } 
    } 

Results.java

public class Results extends Activity { 

QuestionView qv = new QuestionView(); 

ArrayList<Question> queryList = qv.getQueries(); 
ArrayList<Question> qs; 
ArrayList<Long> pointsPerQuestion; 
ArrayList<Button> buttonList = new ArrayList<Button>(10); 

final Context context = this; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.resultsmain); 

    qs = getIntent().getParcelableArrayListExtra("queries"); 

    pointsPerQuestion = qv.getPointsPerQuestion(); 

    q1details.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 

      final Dialog dialog = new Dialog(context); 
      dialog.setContentView(R.layout.q1details); 
      dialog.setTitle("Question 1 Details"); 

      ImageView image = (ImageView)dialog.findViewById(R.id.image); 
      TextView question = (TextView)dialog.findViewById(R.id.question); 
      TextView selectedAnswer = (TextView)dialog.findViewById(R.id.selectedAnswer); 
      TextView correctAnswer = (TextView)dialog.findViewById(R.id.correctAnswer); 
      TextView points = (TextView)dialog.findViewById(R.id.points); 
      TextView verse = (TextView)dialog.findViewById(R.id.verse); 
      Button close = (Button)dialog.findViewById(R.id.close); 

      if(qs.get(0).getSelectedAnswer() == qs.get(1).getCorrectAnswer()) { 
       image.setBackgroundResource(R.drawable.green_check_mark); 
      } else { 
       image.setBackgroundResource(R.drawable.red_x); 
      } 

      question.setText(qs.get(0).getQuery()); 
      selectedAnswer.setText("" + qs.get(0).getSelectedAnswer()); 
      correctAnswer.setText("" + qs.get(0).getCorrectAnswer()); 
      points.setText("" + pointsPerQuestion.get(0)); //Line 120 
      verse.setText(qs.get(0).getVerse());   
      close.setText("Close"); 

      close.setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 
        dialog.dismiss(); 
       } 
      }); 
      dialog.show(); 
     } 
    }); 
} 

logcat的输出

02-14 15:21:13.281: E/AndroidRuntime(1519): FATAL EXCEPTION: main 
02-14 15:21:13.281: E/AndroidRuntime(1519): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at java.util.ArrayList.get(ArrayList.java:304) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at matt.lyons.bibletrivia.Results$4.onClick(Results.java:120) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at android.view.View.performClick(View.java:4202) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at android.view.View$PerformClick.run(View.java:17340) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at android.os.Handler.handleCallback(Handler.java:725) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at android.os.Looper.loop(Looper.java:137) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-14 15:21:13.281: E/AndroidRuntime(1519):  at dalvik.system.NativeStart.main(Native Method) 

EDIT

,即使当我把这一行代码:

long x = 666; 
     pointsPerQuestion.add(x); 

在我onCreate()方法,我得到了同样的错误。 QuestionView类中的getPointsPerQuestion()方法可能可能不工作?

+0

显示开始结果活动的代码 – Rajesh 2013-02-14 15:33:45

+0

您试图从列表中获取信息,目前没有添加任何东西,请尝试在调用nextQuestion()方法后获取信息。 – Rigotti 2013-02-14 15:38:35

+0

“pointsPerQuestion”变量在哪里填充? – breadbin 2013-02-14 15:38:59

回答

1

的问题是,你正在使用的QuestionView类的新实例:

QuestionView qv = new QuestionView(); 

您正在使用,然后拿到pointsPerQuestion阵列:

pointsPerQuestion = qv.getPointsPerQuestion(); 

所以,无论处理您之前在QuestionView活动中执行的操作现在已经在您处于Result活动状态时消失。 你可以使数组公开和静态(在QuestionView中),但我建议反对它。

不如看看这个线程:Using the Android Application class to persist data

,并挑选其中一个解决方案在那里。

+0

啊,疑难杂症。正是我一直在寻找。答案谢谢你的链接,我将整合的建议之一。 – Matt 2013-02-14 16:44:07

相关问题