2017-03-14 18 views
0

전에 네트워크 작업을 수행 제 onCreate() 방법내가 <code>onCreate()</code> 방법으로 서버에 데이터를로드 <code>arrayList</code> 값을 설정하고 다음 내가 어댑터의 도움으로 <code>listView</code>에 데이터를 표시 할하지만 난 내 프로그램을 실행할 때 <code>onCreateView()</code>을 실행 내 응용 프로그램 조각에서 onCreateView

에서 onCreate()는 네트워크 코드 전에

ArrayList<ContactItem> contactsList = new ArrayList<ContactItem>(); 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    final QBUser qbUser = new QBUser("username", "password"); 
    QBAuth.createSession(qbUser).performAsync(new QBEntityCallback<QBSession>() { 
     @Override 
     public void onSuccess(QBSession qbSession, Bundle bundle) { 
      Toast.makeText(getActivity(), "created", Toast.LENGTH_SHORT).show(); 

      for (int i = 0; i < contactName.size(); i++) { 
       QBUsers.getUserByLogin(contactNumber.get(i).replaceAll(" ", "")).performAsync(new QBEntityCallback<QBUser>() { 
        @Override 
        public void onSuccess(QBUser qbUser, Bundle bundle) { 
         if (qbUser != null) { 
          final ContactItem contactItem = new ContactItem(qbUser.getFullName(), qbUser.getLogin(), R.drawable.profile); 
          contactsList.add(contactItem); 

         } 

        } 

        @Override 
        public void onError(QBResponseException e) { 

        } 
       }); 
      } 




     } 

     @Override 
     public void onError(QBResponseException e) { 
      Toast.makeText(getActivity(), "failed " + e.toString(), Toast.LENGTH_LONG).show(); 
     } 
    }); 

}

onCreateView()

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_contacts, container, false); 

    ListView listView = (ListView) rootView.findViewById(R.id.contacts_listview); 

    contactItemAdapter = new ContactItemAdapter(getActivity(), contactsList); 
    listView.setAdapter(contactItemAdapter); 

    return rootView; 
} 
+0

'onCreate()'를 (를) 더 추가 –

+0

그래서 무엇을할까요? 그것이 작동해야하는 방법입니다. 네트워크 콜은'onCreate()'와'omCreateView()'를 실행하는데 필요한 것보다 훨씬 오래 걸립니다. 일단 네트워크 호출이 완료되면'Adapter'의 내용을 업데이트하는 것이 잘못된 것입니까? –

답변

0

코드에서 onCreate()가 호출되고 onCreateView()가 호출됩니다. 하지만 귀하의 API 요청은 백그라운드에서 실행됩니다. 서버에 대한 응답이 오기 전에 onCreateView()가 이미 호출되었으므로 contactsList에 데이터가 없습니다. 당신이 바깥으로 onSuccess의 끝에서 즉 contactsList으로 서버에서 데이터를 가하고 있습니다 후

당신은, onCreateView에서 아래의 라인()는 onSuccess (으로

contactItemAdapter = new ContactItemAdapter(getActivity(), contactsList); 
listView.setAdapter(contactItemAdapter); 

)를 전환 할 수 있습니다().

+0

편집 한대로 내 대답을 편집했습니다. –

0

네트워크 응답 콜백에 조각을 추가하거나 조각의 메소드를 호출합니다. 이것은 조각이 네트워크 응답 전에로드되기 때문에 발생합니다.