2015-01-27 3 views
2

request.executeAnsyc를 호출하여 배열에 정보를 채우고 listview에 표시합니다. 안타깝게도 request.executeAnsyc가 완료되기 전에 배열이 호출됩니다. 따라서 아무 것도 내 프래그먼트의 onCreatView 메소드에 표시되지 않습니다.executeAsync Facebook android SDK

request.executeAnsyc가 완료된 후 배열을 사용하고 listview에 정보를 표시하는 방법이 있습니까?!

좋습니다.

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

    View rootView = inflater.inflate(R.layout.kizombalistfestival, 
      container, false); 
    listUsersInformation = new ArrayList<UserInfo>(); 

      // TODO Auto-generated method stub 

      Session session = Session.getActiveSession(); 
      new Request(session, "/me", null, HttpMethod.GET, 
        new Request.Callback() { 
         public void onCompleted(Response response) { 

          /* handle the result */ 

          String serverresponse = response 
            .getGraphObject().getInnerJSONObject() 
            .toString(); 
          Log.e("serverresponse", "" + serverresponse); 
          JSONObject jsonobj; 

          try { 

           jsonobj = new JSONObject(serverresponse); 
           UserInfo temp = new UserInfo(jsonobj 
             .getString("id"), jsonobj 
             .getString("first_name"), jsonobj 
             .getString("gender"), jsonobj 
             .getString("last_name"), jsonobj 
             .getString("link"), jsonobj 
             .getString("locale"), jsonobj 
             .getString("name"), jsonobj 
             .getString("timezone"), jsonobj 
             .getString("updated_time"), jsonobj 
             .getString("verified")); 

           listUsersInformation.add(temp); 




          } catch (JSONException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 

         } 
        }).executeAsync(); 




     list = (ListView) rootView.findViewById(R.id.list_festivals); 
     list.setAdapter(new ArrayAdapter<UserInfo>(getActivity(), 
       android.R.layout.simple_list_item_1, listUsersInformation)); 



    return rootView; 

} 

답변

1

나는 이것을 구현하는 두 가지 방법을 생각할 수 있습니다. 당신이 원하는 마지막

첫 방송 수신기를 사용

new Request(session, "/me", null, HttpMethod.GET, 
       new Request.Callback() { 
        public void onCompleted(Response response) { 

         /* handle the result */ 

         String serverresponse = response 
           .getGraphObject().getInnerJSONObject() 
           .toString(); 
         Log.e("serverresponse", "" + serverresponse); 
         JSONObject jsonobj; 

         try { 

          jsonobj = new JSONObject(serverresponse); 
          UserInfo temp = new UserInfo(jsonobj 
            .getString("id"), jsonobj 
            .getString("first_name"), jsonobj 
            .getString("gender"), jsonobj 
            .getString("last_name"), jsonobj 
            .getString("link"), jsonobj 
            .getString("locale"), jsonobj 
            .getString("name"), jsonobj 
            .getString("timezone"), jsonobj 
            .getString("updated_time"), jsonobj 
            .getString("verified")); 

          listUsersInformation.add(temp); 




         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } finally { 
          // add your code here 
          handler.post(new Runnable(){ 
           @Override 
           public void run(){ 
             list = (ListView)rootView.findViewById(R.id.list_festivals); 
            list.setAdapter(new ArrayAdapter<UserInfo>(getActivity(), 
      android.R.layout.simple_list_item_1, listUsersInformation)); 
           } 
          }); 
         } 

        } 
       }).executeAsync(); 

2 블록에서 목록보기를 업데이트 처리기를 사용하여

1. 당신은 조각에 수신기를 등록해야 목록보기를 업데이트하십시오. 그런 다음, 페이스 북 기능 클래스, sendBroadcast 등록 된 조각에 (의도) 아래 사항과 같은 :

// your fb request callback 
try { 

    jsonobj = new JSONObject(serverresponse); 
    Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); 
    intent.putExtra("id", id); 
    intent.putExtra("first_name", first_name); 
    intent.putExtra("gender", gender); 
    intent.putExtra("last_name", last_name); 
    // ... and so on 
    context.sendBroadcast(intent); 
} 

결국, 당신의 조각에서 브로드 캐스트 리시버를 등록,

private final BroadcastReceiver streamReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent){ 

     ///Waking up mobile of it is sleeping 
     WakeLocker.acquire(getActivity().getApplicationContext()); 
     String id = intent.getExtras().getString("id"); 
     String first_name = intent.getExtras().getString("first_name");  
     String gender = intent.getExtras().getInt("gender"); 
     ... 
     ... 
     UserInfo temp = new UserInfo(id, 
            first_name, 
            gender, .....); 

     listUsersInformation.add(temp);    

     yourAdapter.notifyDataSetChanged(); 


     WakeLocker.release(); 
    } 
};