所以我正在开发一个Android应用程序,目前有一些代码问题。它实际上很简单......我填写一个arraylist,也检查它是否被填充(它确实)然后再请求arraylist。但是不知怎的,当我稍后请求arraylist它是空的而我不是在做一个新的实例或任何东西......或者我只是简单地想念它。
所以这里的代码出错了......
package net.serellyn.c2m.cal2movement;
import android.app.Activity;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends Activity implements TaskListener{
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private TaskListener listener;
private Exercises exercises;
//...
private ArrayList<String> exerciseArrayList;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setLayout();
sharedPreferences = getSharedPreferences("PreferenceValues", MODE_PRIVATE);
editor = sharedPreferences.edit();
listener = this;
exercises = new Exercises();
new sc_getExercises(listener).execute("http://www.serellyn.net/c2e/app_backend/exercises.php");
}
@Override
public void taskComplete(ArrayList e) {
exercises.setExercises(e);
for(Exercise a : exercises.getExercises()) {
Log.i("DebugInfo", a.getExercise());
}
setLayout();
}
private void setLayout() {
Typeface tf_dinBlack = Typeface.createFromAsset(getAssets(), "DIN_Black.ttf");
Typeface tf_dinMedium = Typeface.createFromAsset(getAssets(), "DIN_Medium.ttf");
Typeface tf_dinLight = Typeface.createFromAsset(getAssets(), "DIN_Light.ttf");
tv_appName = (TextView)findViewById(R.id.tv_appName);
tv_appTagline = (TextView)findViewById(R.id.tv_appTagline);
tv_hourNumber = (TextView)findViewById(R.id.tv_hoursNumber);
tv_hourText = (TextView)findViewById(R.id.tv_hoursText);
tv_minutesNumber = (TextView)findViewById(R.id.tv_minutesNumber);
tv_minutesText = (TextView)findViewById(R.id.tv_minutesText);
tv_yourActivity = (TextView)findViewById(R.id.tv_yourActivity);
s_activities = (Spinner)findViewById(R.id.s_activities);
tv_appName.setTypeface(tf_dinBlack);
tv_appTagline.setTypeface(tf_dinMedium);
tv_hourNumber.setTypeface(tf_dinLight);
tv_hourText.setTypeface(tf_dinLight);
tv_minutesNumber.setTypeface(tf_dinLight);
tv_minutesText.setTypeface(tf_dinLight);
tv_yourActivity.setTypeface(tf_dinLight);
setActivityValues();
}
private void setActivityValues() {
for(Exercise a : exercises.getExercises()) {
Log.i("DebugInfo", a.getExercise());
}
}
}
sc_getExercises是一个AsyncTask,按预期工作,并在'TaskComplete'函数中填充'exercises'数组。我循环'exercise'array以查看它是否已填满,并且它应该被填充。
然而,当我稍后在'setActivityValues'中做同样的事情时,我会得到一个nullpointerexception。
所以这有点......我的眼中很奇怪。我做错了什么?
这是练习课。
package net.serellyn.c2m.cal2movement;
import java.util.ArrayList;
public class Exercises {
private ArrayList<Exercise> exercises;
public Exercises(){
exercises = new ArrayList<Exercise>();
}
public ArrayList<Exercise> getExercises() {
return exercises;
}
public void setExercises(ArrayList<Exercise> exercises) {
this.exercises = exercises;
}
}
我希望有人能发现问题。提前谢谢。
答案 0 :(得分:0)
这是你的方法:
private void setActivityValues() {
for(Exercise a : exercises.getExercises()) {
Log.i("DebugInfo", a.getExercise());
}
}
exercises
为null
(在onCreate
中初始化),或者练习类实例中的exercises
为空(在taskComplete
获取值,调用setExercises
),或循环中的一个练习是null
,或者getExercise
有NullPointerException
错误。
答案 1 :(得分:-2)
它说nullPointerException,检查你的json解析器它是否正确填充你的列表。