Probleme avec attachChildListener
Résolu/Fermé
CR16_Padawan
Messages postés
61
Date d'inscription
mercredi 7 juin 2023
Statut
Membre
Dernière intervention
22 septembre 2024
-
7 oct. 2023 à 12:30
CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 - 7 oct. 2023 à 15:36
CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 - 7 oct. 2023 à 15:36
1 réponse
CR16_Padawan
Messages postés
61
Date d'inscription
mercredi 7 juin 2023
Statut
Membre
Dernière intervention
22 septembre 2024
1
7 oct. 2023 à 15:36
7 oct. 2023 à 15:36
Re: alors maintenant je peux ouvrir ma page, sauf que mes messages ne s'affichent pas avec les bonnes infos et pire tout le monde peut lire les messages!!
explications:
j'utilise 3 utilisateurs différents, (id unique a l'inscription), pour tester mon affichage.
seul 2 utilisateurs ont des messages enregistré sur firebase realtime et pour lesquels les donnés récupérés sont partiellement correct:
1ere erreur: (valeur du message=Ok; mais nom de l'utilisateur=message)
2eme erreur: le 3eme utilisateur affiche tous les messages avec l'erreur1!!
Deplus lors de l'envoi d'un message mon affichage se modifie bien mais rien ne s'inscrit dans firebase.
integralité du code:
package fr.xxx.xxx.activities; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.widget.Toolbar; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.ChildEventListener; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.ArrayList; import fr.xxx.xxx.Adapters.TchatAdapter; import fr.xxx.xxx.R; import fr.xxx.xxx.utilities.Constants; import fr.xxx.xxx.utilities.Message; public class TchatActivity extends AppCompatActivity { private EditText etMessage; private ImageButton sendButton; private FirebaseAuth mAuth; private FirebaseDatabase mDatabase; private DatabaseReference mRef; private FirebaseAuth.AuthStateListener authStateListener; private ChildEventListener childEventListener; private RecyclerView recycler; private SharedPreferences prefs; private String username; private String userId; private TchatAdapter adapter; private static final String TAG ="TCHAT"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tchat); // initialisation de toolbar Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("?? Tchat"); ; setSupportActionBar(toolbar); // initialisation des vues initViews(); initFirebase(); prefs = getSharedPreferences("PreferenceManager",MODE_PRIVATE); authStateListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { attachChildListener(); username = prefs.getString("NAME", null); userId = user.getUid(); adapter.setUser(user); } else { startActivity(new Intent(getApplicationContext(), Next.class)); finish(); } } }; } private void initViews(){ etMessage = (EditText) findViewById(R.id.etMessage); sendButton = (ImageButton) findViewById(R.id.sendButton); recycler = (RecyclerView) findViewById(R.id.recycler); LinearLayoutManager manager = new LinearLayoutManager(this); manager.setStackFromEnd(true);; recycler.setLayoutManager(manager); ArrayList<Message> messages = new ArrayList<>(); adapter = new TchatAdapter(messages); recycler.setAdapter(adapter); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendMessage(); etMessage.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { if(i == EditorInfo.IME_ACTION_DONE){ sendMessage(); InputMethodManager imm = (InputMethodManager) textView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(textView.getWindowToken(),0); return true; } return false; } }); } }); } private void initFirebase(){ mAuth = FirebaseAuth.getInstance(); mDatabase = FirebaseDatabase.getInstance(); mRef = mDatabase.getReference(); } @Override public boolean onCreateOptionsMenu (Menu menu){ getMenuInflater().inflate(R.menu.menu_deconnexion, menu); return true; } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if(item.getItemId() == R.id.logout){ //TODO } return super.onOptionsItemSelected(item); } @Override protected void onPause() { super.onPause(); if(authStateListener !=null){ mAuth.removeAuthStateListener(authStateListener); } detachChildListener(); } @Override protected void onResume() { super.onResume(); mAuth.addAuthStateListener(authStateListener); } private void attachChildListener() { if (childEventListener == null) { childEventListener = new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Log.w(TAG, "onChildAdded: "); Message message = dataSnapshot.getValue(Message.class); message.setUid(dataSnapshot.getKey()); adapter.addMessage(message); recycler.scrollToPosition(adapter.getItemCount() - 1); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { /* Message message = dataSnapshot.getValue(Message.class); message.setUid(dataSnapshot.getKey()); adapter.deleteMessage(message);*/ } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError error) { } }; // ".limitToLast(100)" a ajouter apres "mRef.child(Constants.KEY_MESSAGES_DB)" pour limiter le nbre de messages a afficher mRef.child(Constants.KEY_MESSAGES_DB).addChildEventListener(childEventListener); } } private void detachChildListener(){ if (childEventListener!=null){ mRef.child(Constants.KEY_MESSAGES_DB).removeEventListener(childEventListener); childEventListener=null; } } private void sendMessage() { String content = etMessage.getText().toString(); if(!TextUtils.isEmpty(content)){ Message message= new Message(null,userId, content, null); mRef.child(Constants.KEY_MESSAGES_DB).push().setValue(message); etMessage.setText(""); } } }
Merci pour vos réponses.