Java Android:ArrayList在第二次调用时获取空指针

Java Android:ArrayList在第二次调用时获取空指针,java,android,arraylist,Java,Android,Arraylist,因此,我正在开发一款android应用程序,目前有些代码出现了问题。其实很简单。。。我填充了一个arraylist,还检查了它是否被填充(它被填充了),然后在以后请求该arraylist。但不知何故,当我稍后请求arraylist时,它是空的,并且我没有创建新实例或任何东西。。。或者我只是错过了它 这是出错的代码 package net.serellyn.c2m.cal2movement; import android.app.Activity; import android.content.

因此,我正在开发一款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());
        }
    }
}
package net.serellyn.c2m.cal2移动;
导入android.app.Activity;
导入android.content.SharedReferences;
导入android.graphics.Typeface;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.AutoCompleteTextView;
导入android.widget.EditText;
导入android.widget.Spinner;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类MainActivity扩展活动实现TaskListener{
私人共享引用共享引用;
私有共享参考。编辑器;
私有任务侦听器;
私人演习;
//...
私人ArrayList exerciseArrayList;
//...
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setLayout();
sharedPreferences=getSharedPreferences(“首选值”,MODE_PRIVATE);
editor=SharedReferences.edit();
监听器=这个;
练习=新练习();
新建sc_getExercises(侦听器)。执行(“http://www.serellyn.net/c2e/app_backend/exercises.php");
}
@凌驾
公共作废任务完成(ArrayList e){
练习。SET练习(e);
for(练习a:exercises.getExercises()){
Log.i(“DebugInfo”,a.getExercise());
}
setLayout();
}
私有void setLayout(){
Typeface tf_dinBlack=Typeface.createFromAsset(getAssets(),“DIN_Black.ttf”);
Typeface tf_dinmedia=Typeface.createFromAsset(getAssets(),“DIN_media.ttf”);
Typeface tf_dinLight=Typeface.createFromAsset(getAssets(),“DIN_Light.ttf”);
tv_appName=(TextView)findviewbyd(R.id.tv_appName);
tv_appTagline=(TextView)findviewbyd(R.id.tv_appTagline);
tv_hourNumber=(TextView)findViewById(R.id.tv_hourNumber);
tv_hourText=(TextView)findViewById(R.id.tv_hoursText);
tv_minutesNumber=(TextView)findViewById(R.id.tv_minutesNumber);
tv_minutext=(TextView)findviewbyd(R.id.tv_minutext);
tv_yourActivity=(TextView)findViewById(R.id.tv_yourActivity);
s_活动=(微调器)findViewById(R.id.s_活动);
tv_appName.setTypeface(tf_dinBlack);
tv_appTagline.setTypeface(tf_dinmedia);
电视小时数设置字体(tf_dinLight);
tv_hourText.setTypeface(tf_dinLight);
电视分钟数。设置字体(tf_dinLight);
电视分钟文本设置字体(tf_dinLight);
设置字体(tf_dinLight);
setActivityValues();
}
私有void setActivityValues(){
for(练习a:exercises.getExercises()){
Log.i(“DebugInfo”,a.getExercise());
}
}
}
sc_getExercises是一个异步任务,按预期工作,并填充“TaskComplete”函数中的“exercises”数组。我循环“exercises”数组以查看它是否已填充,并且它已按其应该的方式填充

但是,当我稍后在“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;
        }    
    }
package net.serellyn.c2m.cal2移动;
导入java.util.ArrayList;
公开课练习{
私人ArrayList练习;
公众演习(){
练习=新建ArrayList();
}
公共ArrayList getExercises(){
返回练习;
}
公开练习(ArrayList练习){
这个。练习=练习;
}    
}

我希望有人能发现这个问题。提前感谢。

它显示nullPointerException,请检查您的json解析器,它是否正确填充了您的列表。

这是您的方法:

private void setActivityValues() {
    for(Exercise a : exercises.getExercises()) {
        Log.i("DebugInfo", a.getExercise());
    }
}

您的练习类实例中的
exercises
null
(它在
onCreate
中初始化),或者
exercises
为null(在调用
setExercises
任务完成处获取值),或者循环中的一个练习为
null
,或者
getExercise
有一个
NullPointerException
错误。

(1)请提供完整的堆栈跟踪。(2) 请仅提供与问题相关的部分代码,最小化您的代码并删除与问题本身无关的任何内容。您在哪里初始化exerciseArrayList?很抱歉,问题/代码混乱且不清楚。。。我正要重写整个问题,直到我找到了导致问题的原因…它在这一部分起作用:@Override public void taskComplete(ArrayList e){exerces.setExercises(e);for(Exercise a:exercises.getExercises()){Log.I(“DebugInfo”,a.getExercise());}setLayout();}但是后来arraylist又空了。我如何才能找到解决问题的最佳方法呢?我还尝试了Log.I(“DebugInfo”,String.valueOf(exercises.getExercises().size());和Log.i(“DebugInfo”,exercises.toString());但是他们也得到了一个零指针。谢谢你的帮助,但是我发现了这个问题,这是最愚蠢的问题。如果我的回答对你有帮助,你可以考虑接受它。如果没有,请回答你自己的问题。