0
Firebaseが最後の更新を行った後にいくつか問題があります。現時点で私の最大の問題は、私がこのアップデートの前にやったアプリケーションのクラスを修正することができないということです。 以下のクラスは、私のリストビューで同じ名前を3回返しています.3人の登録ユーザーがいて、3人すべてが異なる名前を持っています。Firebaseが3回同じ値を返しています
注:アプリケーションが記録されているユーザーの名前の3倍を返します。
package com.example.stark.chattest;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.example.stark.chattest.model.Message;
import com.example.stark.chattest.model.User;
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;
public class ChatActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private DatabaseReference myRef = database.getReference("users");
private String TAG = "Resultado: ";
private ArrayList<String> userName = new ArrayList<String>();
private ListView usersListView = (ListView) findViewById(R.id.chatListView);
private ListAdapter usersListViewAdapter = new ArrayAdapter<String>(ChatActivity.this, android.R.layout.simple_list_item_1, userName);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
} else {
Intent intent = new Intent(ChatActivity.this, SignActivity.class);
startActivity(intent);
finish();
}
}
};
ImageButton sendImageButton = (ImageButton) findViewById(R.id.sendImageButton);
sendImageButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText messageEditText = (EditText)findViewById(R.id.messageEditText);
FirebaseUser firebaseUser = mAuth.getCurrentUser();
Message message = new Message();
message.setMessage(String.valueOf(messageEditText.getText()));
message.setRead(true);
message.setTime(22221);
message.setSendersID(firebaseUser.getUid());
message.setReceiversID("WTImZyGv5fcOJlGWI9fi0gdrfbd2");
myRef.child(message.getSendersID()).child("message").child(message.getReceiversID()).child("4").setValue(message);
//Set the Reciever Message
message.setRead(false);
myRef.child(message.getReceiversID()).child("message").child(message.getSendersID()).child("4").setValue(message);
}
});
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
User user = dataSnapshot.getValue(User.class);
userName.add(user.getName());
usersListView.setAdapter(usersListViewAdapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
myRef.addChildEventListener(childEventListener);
}
}
注:英語は私の母国語ではありません:P
@Edit 私はonChildChanged内のすべてのものを削除し、onChildAddedですべてのコードを置きます。
に役立ちますかどうかを確認し、からコードを削除することができますが、firebaseについての詳細を説明できますか? –
@AnandSavjaniはいあなたは何を知っていますか? btw docsはhttps://firebase.google.com/docs/ –
https://www.firebase.com/docs/android/quickstart.htmlで始まる最良の場所です。このURLはhttps:// firebaseとは異なります.google.com/docs /? –