2017-10-04 3 views
1

Je construis une application de chat Android avec quickblox .. et quand je veux récupérer la liste des dialogues de chats et la liste des utilisateurs il n'est pas apparu sur mon écran .. j'avais cherché ce problème et je trouve que je devais activer la liste des utilisateurs récupération .. donc je l'ai fait, mais rien changé ... Voici mon code ChatDialogsList:QuickBlox récupérer des dialogues de causerie Android

package shashoug.com.zoolisd; 

    import android.app.ProgressDialog; 
    import android.content.Intent; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.ListView; 
    import com.quickblox.auth.QBAuth; 
    import com.quickblox.auth.session.BaseService; 
    import com.quickblox.auth.session.QBSession; 
    import com.quickblox.auth.session.QBSettings; 
    import com.quickblox.chat.QBChatService; 
    import com.quickblox.chat.QBRestChatService; 
    import com.quickblox.chat.model.QBChatDialog; 
    import com.quickblox.core.QBEntityCallback; 
    import com.quickblox.core.exception.BaseServiceException; 
    import com.quickblox.core.exception.QBResponseException; 
    import com.quickblox.core.request.QBRequestGetBuilder; 
    import com.quickblox.users.model.QBUser; 
    import java.util.ArrayList; 
    import shashoug.com.zoolisd.Adapter.ChatDialogAdapter; 

    public class ChatDialogActivity extends AppCompatActivity { 
    private ListView chatListDialogs; 
    private FloatingActionButton floatingActionButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_chat_dialog); 

     floatingActionButton = (FloatingActionButton) findViewById(R.id.fab); 
     chatListDialogs = (ListView) findViewById(R.id.lstChatsDialog); 
     createSessionForChat(); 
     loadAllChat(); 
     floatingActionButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(ChatDialogActivity.this,ListUsersActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
    private void loadAllChat() { 
     QBRequestGetBuilder requestBuilder = new QBRequestGetBuilder(); 
     requestBuilder.setLimit(100); 
     QBRestChatService.getChatDialogs(null,requestBuilder).performAsync(new QBEntityCallback<ArrayList<QBChatDialog>>() { 
      @Override 
      public void onSuccess(ArrayList<QBChatDialog> qbChatDialogs, Bundle bundle) { 
       ChatDialogAdapter adapter = new ChatDialogAdapter(getBaseContext(),qbChatDialogs); 
       chatListDialogs.setAdapter(adapter); 
       adapter.notifyDataSetChanged(); 
      } 
      @Override 
      public void onError(QBResponseException e) { 
       Log.e("ERROR",e.getMessage()); 
      } 
     }); 
    } 
    private void createSessionForChat() { 
     final ProgressDialog mDialog = new ProgressDialog(ChatDialogActivity.this); 
     mDialog.setTitle("Retreiveing The Dialogs"); 
     mDialog.setMessage("Please Wait While We Collecting your Chats Info."); 
     mDialog.setCanceledOnTouchOutside(false); 
     mDialog.show(); 
     String name,password; 
     name = getIntent().getStringExtra("name"); 
     password = getIntent().getStringExtra("password"); 
     final QBUser qbUser = new QBUser(name,password); 
     QBAuth.createSession(qbUser).performAsync(new QBEntityCallback<QBSession>() { 
      @Override 
      public void onSuccess(QBSession qbSession, Bundle bundle) { 
       mDialog.dismiss(); 
       qbUser.setId(qbSession.getUserId()); 
       try { 
        qbUser.setPassword(BaseService.getBaseService().getToken()); 
       } catch (BaseServiceException e) { 
        e.printStackTrace(); 
       } 
       QBChatService.getInstance().login(qbUser, new QBEntityCallback() { 
        @Override 
        public void onSuccess(Object o, Bundle bundle) { 
         mDialog.dismiss(); 
        } 

        @Override 
        public void onError(QBResponseException e) { 
        Log.e("ERROR",e.getMessage()); 
        } 
       }); 

      } 

      @Override 
      public void onError(QBResponseException e) { 
       Log.e("ERROR",e.getMessage()); 
      } 
     }); 
    } 
} 

et voici mon code ChatsDialogAdapter:

package shashoug .com.zoolisd.Adapter;

import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.BaseAdapter; 
    import android.widget.ImageView; 
    import android.widget.TextView; 

    import com.amulyakhare.textdrawable.TextDrawable; 
    import com.amulyakhare.textdrawable.util.ColorGenerator; 
    import com.quickblox.chat.model.QBChatDialog; 

    import java.util.ArrayList; 

    import shashoug.com.zoolisd.R; 

    public class ChatDialogAdapter extends BaseAdapter { 
    private Context context; 
    private ArrayList<QBChatDialog> qbChatDialogs; 

    public ChatDialogAdapter(Context context, ArrayList<QBChatDialog> qbChatDialogs) { 
     this.context = context; 
     this.qbChatDialogs = qbChatDialogs; 
    } 

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

    @Override 
    public Object getItem(int position) { 
     return qbChatDialogs.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view ==null) 
     { 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.list_chat_dialog,null); 
      TextView txtTitle; 
      TextView txtMessage; 
      ImageView imageView; 
      txtTitle = (TextView) view.findViewById(R.id.list_chat_dialog_title); 
      txtMessage = (TextView) view.findViewById(R.id.list_chat_dialog_message); 
      imageView = (ImageView) view.findViewById(R.id.image_chat_dialog); 
      txtMessage.setText(qbChatDialogs.get(position).getLastMessage()); 
      txtTitle.setText(qbChatDialogs.get(position).getName()); 
      ColorGenerator generator = ColorGenerator.MATERIAL; 
      int randomColor = generator.getRandomColor(); 
      TextDrawable.IBuilder builder = TextDrawable.builder().beginConfig() 
        .withBorder(4) 
        .endConfig() 
        .round(); 
      TextDrawable drawable = builder.build(txtTitle.getText().toString().substring(0,1).toUpperCase(),randomColor); 
      imageView.setImageDrawable(drawable); 





     } 
     return view; 
    } 
} 
+0

avez-vous utilisé ma solution ci-dessous? quel était le résultat? –

Répondre

0

Dans votre cas, vous appelez la méthode asynchrone createSessionForChat() et appeler à la fois la méthode loadAllChat() dans le résultat de commencer les boîtes de dialogue de chargement en même temps avec la création de la session. Vous devez appeler la méthode loadAllChat() après avoir créé une session QB.