2015-01-27 2 views
2

Я вызываю request.executeAnsyc для заполнения моего массива информацией и отображения в списке. К сожалению, массив вызывается до завершения request.executeAnsyc .. поэтому ничего не отображается в методеCreatView моего фрагмента.executeAsync Facebook android SDK

Есть ли способ использовать массив после завершения request.executeAnsyc и отображения информации в списке?

С наилучшими пожеланиями.

@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

Я могу придумать два способа реализовать это.

1. с помощью обработчика, чтобы обновить ListView в конце концов блок

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. используя широковещательный приемник

Во-первых, необходимо зарегистрировать приемник в фрагменте вы хотели бы обновите свой список. Тогда в вашем классе функций Facebook, 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); 
} 

В конце концов, в вашем фрагменте, который зарегистрирован BroadcastReceiver,

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