할당 된 지역 변수가 null이되는 이유

브루스 헤

에서 onCreateView내가 전화 getDataFromServer(String url)하고 전화 내부에 또 다른 기능이 있었다 processData(String son). 지역 변수를 설정했습니다.

String json = "" inside the processData(String son);

할 수 있었지만 프로그램이에 도달하기 위해 다음 단계로 이동하면 갑자기 null이됩니다 initTopicNewsImages().

    public class NewsCenterFragment extends Fragment implements View.OnClickListener{
    private ViewPager viewPager;
    private ViewPager topicNews;
    private ArrayList<String> topicImages;
    //private Activity mActivity;
    private ArrayList<NewsMenu.NewsTabData> newsTabDatas;
    private ArrayList<View> views;
    private TabPageIndicator mIndicator;
    private ImageButton next_btn;
    private NewsInfo newsInfo;
    private BitmapUtils mBitmapUtil;
    private int counter=0;
    private boolean firstEnter = true;
    private String json = "";
    public NewsCenterFragment(ArrayList<NewsMenu.NewsTabData> datas){
        this.newsTabDatas = datas;

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

     //   LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(mActivity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.fragment_newscenter_layout,container,false);
        viewPager = (ViewPager) view.findViewById(R.id.fragment_newscenter_viewPager);
        topicNews = (ViewPager) view.findViewById(R.id.fragment_newscenter_viewPager_topicNews);

        //mBitmapUtil = new BitmapUtils(getActivity());

        mIndicator = (TabPageIndicator) view.findViewById(R.id.fragment_newscenter_tabPageIndicator);
        next_btn = (ImageButton) view.findViewById(R.id.fragment_newscenter_next);
        next_btn.setOnClickListener(this);
        views = new ArrayList<View>();
        //View tempLayout = inflater.inflate(R.layout.news_title_layout,container,false);


        for(int i=0;i<newsTabDatas.size();i++){
            View tempLayout = inflater.inflate(R.layout.news_title_layout,container,false);
            views.add(tempLayout);
        }

        viewPager.setAdapter(new NewsMenuDetailAdapter());
        mIndicator.setViewPager(viewPager);
        firstEnter = false;
        Log.d("newsTabDatas.get(0).url",newsTabDatas.get(0).url);
        getDataFromServer(newsTabDatas.get(0).url);
        initTopicNewsImages();
       //topicNews.setAdapter(new MyTopicNewsAdapter());
        return view;
   }

    @Override
    public void onClick(View v) {
        int currentPage = viewPager.getCurrentItem();
        viewPager.setCurrentItem(currentPage+1);
    }

    class NewsMenuDetailAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return views.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==(View) object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
                String tabTitle = newsTabDatas.get(position).title;
                View view = views.get(position);
                TextView textView = (TextView) view.findViewById(R.id.news_title_layout_title);
                textView.setText(tabTitle);
            Log.d("NewsCenterFragment", "Position " + position);
                //getDataFromServer(newsTabDatas.get(position).url);
                //initTopicNewsImages();
                //topicNews.setAdapter(new MyTopicNewsAdapter());
                container.addView(view);
                return view;

        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);
        }

        @Override
        public CharSequence getPageTitle(int position) {

            return newsTabDatas.get(position).title;
        }
    }

    private void getDataFromServer(String url){
        HttpUtils httpUtils = new HttpUtils();

        httpUtils.send(HttpMethod.GET, GlobalConstans.SERVER_URL+url, new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                String resultJson = responseInfo.result;
                setJson(resultJson);
                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();
            }
        });


    }
    private void processData(String json){
        Gson gson = new Gson();
        newsInfo = gson.fromJson(json, NewsInfo.class);
        //Log.d("Check empty",newsInfo.toString());
        Log.d("Geson3",newsInfo.data.topnews.toString());
        counter+=1;
        Log.d("counter",String.valueOf(counter));
        //Log.d("JSON in process",getJson());
    }

    private void initTopicNewsImages(){
        Log.d("JSON in process",getJson());
//        for(NewsInfo.TopNews topNews:newsInfo.data.topnews){
//            String topImage = topNews.topimage;
//            topicImages.add(topImage);
//        }
//        Gson gson = new Gson();
//        newsInfo = gson.fromJson(json, NewsInfo.class);



    }

    class MyTopicNewsAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return topicImages.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            String url = topicImages.get(position);
            ImageView view = new ImageView(getActivity());
            mBitmapUtil.display(view,url);
            container.addView(view);
            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }


    public String getJson() {
        return json;
    }

    public void setJson(String json) {
        this.json = json;
    }

    public NewsInfo getNewsInfo() {
        return newsInfo;
    }

    public void setNewsInfo(NewsInfo newsInfo) {
        this.newsInfo = newsInfo;
    }
}
로힛 아리아

어떻게 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();
            }
        });

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

전역 var가 지역이 됨 --UnboundLocalError : 할당 전에 참조 된 지역 변수

분류에서Dev

할당 오류 이전에 참조 된 지역 변수

분류에서Dev

할당 된 배열이있는 경우 {{}}에 변수에 할당 된 필드가 표시되지 않는 이유는 무엇입니까?

분류에서Dev

'할당 전에 참조 된 지역 변수'를 이해하기 어려움

분류에서Dev

이상한 조건에서 할당 전에 참조 된 지역 변수

분류에서Dev

IF 조건 파이썬 "할당 전에 참조 된 지역 변수 'monthlyPayment'"

분류에서Dev

지역 변수의 메모리가 재 할당됩니다-이유

분류에서Dev

지역 변수가 자동으로 변경된 이유

분류에서Dev

JavaScript에서 전역 변수 재 할당-누군가 currentAcc가 정의되지 않은 상태로 유지되는 이유를 설명 할 수 있습니까?

분류에서Dev

초기화되지 않은 변수가 TryParse 내부에 값이 설정된 후 다시 할당되지 않는 이유는 무엇입니까?

분류에서Dev

전역 적으로 할당 된 변수가 표시되지 않음

분류에서Dev

파이썬 스레드가 변수를 인식하지 못합니다. 할당 전에 참조 된 지역 변수 '이미지'

분류에서Dev

NULL이 할당 된 포인터를 단순히 역 참조하는 것이 충돌하지 않는 이유

분류에서Dev

할당 된 객체의 주소가 C ++에서 변경되지 않는 이유는 무엇입니까?

분류에서Dev

Python : 변수와 클래스의 이름이 같은 경우 : UnboundLocalError : 할당 전에 참조 된 지역 변수 'foo'

분류에서Dev

핵심 데이터에서 할당 된 변수가 null이 됨

분류에서Dev

이 변수에 ZERO가 할당 된 이유는 TWO 값을 갖습니다.

분류에서Dev

Proc 내에서 할당 된 변수가 Proc의 반복 호출에서 지속되지 않는 이유는 무엇입니까?

분류에서Dev

Python : 변수가 할당 전에 참조 된 while 루프 + 지역 변수에서 재 할당되지 않는 것 같습니다.

분류에서Dev

지역 변수에 의해 할당되지 않은 다른 바이트가 스택에있는 이유는 무엇입니까?

분류에서Dev

파이프 라인에 할당 된 변수가 작동하지 않습니다.

분류에서Dev

로컬 함수가 전역 개체 (창)에 할당되지 않는 이유는 무엇입니까?

분류에서Dev

이미 할당 된 지역 변수를 참조하기 위해 문자열 사용

분류에서Dev

Python의 다중 처리-UnboundLocalError : 할당 전에 참조 된 지역 변수 '데이터'

분류에서Dev

"X에 할당 된 H2077 값은 사용되지 않음"이 문자열 변수에 포함되지 않는 이유는 무엇입니까?

분류에서Dev

DbFlow가 변수에 할당되지 않고 개체를 저장할 수없는 이유는 무엇입니까?

분류에서Dev

최종 지역 변수는 포함 된 유형으로 정의되어 있으므로 할당 할 수 없습니다.

분류에서Dev

Bash-지역 변수 대 전역 변수의 배열 길이 (할당)

분류에서Dev

ArrayList가 재 할당 할 때 Java 변수가 무효화되지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    전역 var가 지역이 됨 --UnboundLocalError : 할당 전에 참조 된 지역 변수

  2. 2

    할당 오류 이전에 참조 된 지역 변수

  3. 3

    할당 된 배열이있는 경우 {{}}에 변수에 할당 된 필드가 표시되지 않는 이유는 무엇입니까?

  4. 4

    '할당 전에 참조 된 지역 변수'를 이해하기 어려움

  5. 5

    이상한 조건에서 할당 전에 참조 된 지역 변수

  6. 6

    IF 조건 파이썬 "할당 전에 참조 된 지역 변수 'monthlyPayment'"

  7. 7

    지역 변수의 메모리가 재 할당됩니다-이유

  8. 8

    지역 변수가 자동으로 변경된 이유

  9. 9

    JavaScript에서 전역 변수 재 할당-누군가 currentAcc가 정의되지 않은 상태로 유지되는 이유를 설명 할 수 있습니까?

  10. 10

    초기화되지 않은 변수가 TryParse 내부에 값이 설정된 후 다시 할당되지 않는 이유는 무엇입니까?

  11. 11

    전역 적으로 할당 된 변수가 표시되지 않음

  12. 12

    파이썬 스레드가 변수를 인식하지 못합니다. 할당 전에 참조 된 지역 변수 '이미지'

  13. 13

    NULL이 할당 된 포인터를 단순히 역 참조하는 것이 충돌하지 않는 이유

  14. 14

    할당 된 객체의 주소가 C ++에서 변경되지 않는 이유는 무엇입니까?

  15. 15

    Python : 변수와 클래스의 이름이 같은 경우 : UnboundLocalError : 할당 전에 참조 된 지역 변수 'foo'

  16. 16

    핵심 데이터에서 할당 된 변수가 null이 됨

  17. 17

    이 변수에 ZERO가 할당 된 이유는 TWO 값을 갖습니다.

  18. 18

    Proc 내에서 할당 된 변수가 Proc의 반복 호출에서 지속되지 않는 이유는 무엇입니까?

  19. 19

    Python : 변수가 할당 전에 참조 된 while 루프 + 지역 변수에서 재 할당되지 않는 것 같습니다.

  20. 20

    지역 변수에 의해 할당되지 않은 다른 바이트가 스택에있는 이유는 무엇입니까?

  21. 21

    파이프 라인에 할당 된 변수가 작동하지 않습니다.

  22. 22

    로컬 함수가 전역 개체 (창)에 할당되지 않는 이유는 무엇입니까?

  23. 23

    이미 할당 된 지역 변수를 참조하기 위해 문자열 사용

  24. 24

    Python의 다중 처리-UnboundLocalError : 할당 전에 참조 된 지역 변수 '데이터'

  25. 25

    "X에 할당 된 H2077 값은 사용되지 않음"이 문자열 변수에 포함되지 않는 이유는 무엇입니까?

  26. 26

    DbFlow가 변수에 할당되지 않고 개체를 저장할 수없는 이유는 무엇입니까?

  27. 27

    최종 지역 변수는 포함 된 유형으로 정의되어 있으므로 할당 할 수 없습니다.

  28. 28

    Bash-지역 변수 대 전역 변수의 배열 길이 (할당)

  29. 29

    ArrayList가 재 할당 할 때 Java 변수가 무효화되지 않는 이유는 무엇입니까?

뜨겁다태그

보관