为什么指定的局部变量变为null

时间:2016-06-27 07:48:31

标签: android android-fragments android-json

在名为onCreateView的{​​{1}}中,其中有另一个名为getDataFromServer(String url)的函数。我设置了局部变量:

processData(String son)

它可以完成,但当程序进入下一步到达String json = "" inside the processData(String son); 时,它会突然变为空。

initTopicNewsImages()

1 个答案:

答案 0 :(得分:1)

您应该了解asynchronous call的工作原理。当你调用httpUtils.send时,它会在后台线程上运行(关闭UI线程)。现在主线程上的control到达initTopicNewsImages()(在调用getDataFromServer(newsTabDatas.get(0).url)之后),到那时后台线程没有返回,因此json 不是已更新。

您应该做的是,在后台线程返回后调用initTopicNewsImages()方法。 像下面这样的东西会起作用:

httpUtils.send(HttpMethod.GET, GlobalConstans.SERVER_URL+url, new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                String resultJson = responseInfo.result;
                setJson(resultJson);
                initTopicNewsImages(); //CALLING FROM HERE.
                Log.d("*************************",json);
                //CacheUtils.setCache(GlobalConstans.CATEGORY_URL,result,getActivity());
                processData(json);
            }

            @Override
            public void onFailure(HttpException e, String s) {
                e.printStackTrace();
                Log.d("Fail","fail");
                Toast.makeText(getActivity(),"Failure", Toast.LENGTH_SHORT).show();
            }
        });