【发布时间】:2014-11-13 11:19:30
【问题描述】:
获取数组大小时出现空指针异常。我只在某些设备上得到空指针异常。
我有一个名为ExerciseStartActivity 的课程。这里我称之为randomize方法。
public class ExerciseStartActivity extends Activity{
private Exercise currentExercise;
private FitnessExercise myExercises;
private int exerciseNbr;
private int maxExercises;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//..
....
....
//
initExercise();
}
private void initExercise() {
exerciseNbr = 0;
Exercise[] exercises = loadExercises(SavingData.getDifficulty());
myExercises = new FitnessExercise(exercises);
myExercises.randomize();
maxExercises = myExercises.nbrOfExercises();
nextExercise();
}
private Exercise[] loadExercises(int difficulty) {
Exercise[] exercise = null;
switch(difficulty){
case R.id.radio_easy:
exercise = difficultyEasy();
break;
case R.id.radio_medium:
exercise = difficultyMedium();
break;
case R.id.radio_hard:
exercise = difficultyHard();
break;
}
return exercise;
}
private Exercise[] difficultyHard() {
Exercise[] exercises = {new Exercise("Push-ups", "pushup", 40),
new Exercise("Leg-up Crunches", "crunch_leg_up", 90),
new Exercise("Crunches", "crunch", 90),
new Exercise("Bicycle Crunches", "crunch_cycle", 100),
new Exercise("Jumping Jacks", "jumpingjack", 100),
new Exercise("Squats", "squats", 30),
new Exercise("High Knees", "highknees", 120),
new Exercise("Lunges", "lunge", 30),
new Exercise("Bench Dips", "bench_dips", 40),
new Exercise("Knee Push-ups", "kneepushups", 80)
};
return exercises;
}
}
我有一个带有 randomize 类的 FitnessExercise 类: 在这个类中,当调用 randomize() 方法时,我得到空指针异常。
public class FitnessExercise { private Exercise[] exercises; // Array
with all the questions
private int index = -1; // Index of the question
private Random random = new Random();
public FitnessExercise(Exercise[] exercises){
this.exercises = exercises;
}
public void randomize()
{
int swapPos;
Exercise message;
for (int i = exercises.length - 1; i > 0; i--)
{
swapPos = random.nextInt(i + 1);
message = exercises[i];
exercises[i] = exercises[swapPos];
exercises[swapPos] = message;
}
}
}
以下是错误:
java.lang.RuntimeException: Unable to start activity
> ComponentInfo{com.playsimple.fitnessapp/com.playsimple.fitnessapp.ExerciseStartActivity}:
> java.lang.NullPointerException at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
> at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
> at android.app.ActivityThread.access$800(ActivityThread.java:135) at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
> at android.os.Handler.dispatchMessage(Handler.java:102) at
> android.os.Looper.loop(Looper.java:136) at
> android.app.ActivityThread.main(ActivityThread.java:5001) at
> java.lang.reflect.Method.invokeNative(Native Method) at
> java.lang.reflect.Method.invoke(Method.java:515) at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at
> dalvik.system.NativeStart.main(Native Method) Caused by:
> java.lang.NullPointerException at
> com.playsimple.fitnessapp.FitnessExercise.randomize(FitnessExercise.java:34)
> at
> com.playsimple.fitnessapp.ExerciseStartActivity.initExercise(ExerciseStartActivity.java:74)
> at
> com.playsimple.fitnessapp.ExerciseStartActivity.onCreate(ExerciseStartActivity.java:67)
> at android.app.Activity.performCreate(Activity.java:5231) at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
> at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
> ... 11 more
【问题讨论】:
-
你考虑过
loadExercises可能返回null的可能性吗? -
我现在已经添加了 loadExercises()。但是为什么它只在某些情况下返回 null 呢?
标签: java android arrays nullpointerexception