使用JSON填充数组,但在退出方法后丢失信息

时间:2016-06-05 00:06:48

标签: java android arrays json

我试图在这里创建一个列表,但问题是在我使用信息填充数组daysList之后,在退出onResponse之后一切都会丢失。

如果我在onResponse方法中设置textview它可以工作,但如果我在外面做(如本例),它就不会,我得到空指针异常。

我知道我必须将数组定义为静态以保存数据,但它也不起作用!我该如何解决这个问题?

public class MainFragment extends Fragment {

private View view;
private RequestQueue requestQueue;
private WeatherAdapter weatherAdapter;
public static WeatherForecast weatherForecast;
public static WeatherForecast.List[] daysList;

private ListView listView;
private TextView textView;

String URL = "requestURL";

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

public View onCreateView ( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    view = inflater.inflate(R.layout.main_fragment,null);

    textView = (TextView) view.findViewById(R.id.textview);

    requestQueue = Volley.newRequestQueue(getActivity());
    JsonObjectRequest jsonWeatherRequest = new JsonObjectRequest(
            URL,
            null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    weatherForecast = parseWeatherToJson(response.toString());
                    daysList = weatherForecast.getList();
                    //textView.setText("Humidity is: " + daysList[0].getHumidity());  <--- If i set it here it works!
                    weatherAdapter.notifyDataSetChanged();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.v(TAG, "On Error!");
                }
            }
    );

    requestQueue.add(jsonWeatherRequest);

    textView.setText("Humidity is: " + daysList[0].getHumidity()); // <---- This throws nullpointer.
}

3 个答案:

答案 0 :(得分:1)

  

如果我在onResponse方法中设置textview它可以工作,但是如果我在外面做的话就不行

Net请求是一个异步操作,因此您必须在回调对象的方法中编写所有逻辑。这就是为什么你在回调对象中有数据的原因,但是你没有他们的数据。

答案 1 :(得分:1)

apply()是异步请求,它会命中服务器并在jsonWeatherRequest回调中获取响应。当您使用onResponse()之外的列表值设置TextView时,您的请求未完成,因此您的列表为空。

因此,如果您想访问该列表,则必须在onResponse()回调中执行此操作。

答案 2 :(得分:0)

  

有没有办法在onResponse方法之外使用数组信息?

是的。当然有。

但你需要等待响应首先完成!!

这就是您的代码中缺少的内容。

本Q&amp; A解释了如何等待Volley请求完成:

请注意如果您在错误的地方等待,则可能会锁定您应用的用户界面。