에서 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] 삭제
몇 마디 만하겠습니다