0
firebaseにデータを実装する際に問題が発生しましたが、複製されてしまい、fab.setOnClickListenerをクリックしてデータベースにメッセージを追加する際に問題があります。Firebaseでメッセージを1対1に複製するチャットアプリケーション
そして、私はFirebaseにメッセージを追加するとき、私の注文と関係があります(私は注文のためにmessageCountを使います)。ここにfirebase Databaseのコードと画像があります。
コード:データベースの
private static final int SIGN_IN_REQUEST_CODE = 111;
private FirebaseListAdapter<ChatMessage> adapter;
private ListView listView;
private int messagesCount = 0;
private DatabaseReference myRef;
private User mUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
myRef = FirebaseDatabase.getInstance().getReference();
//find views by Ids
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
final EditText input = (EditText) findViewById(R.id.input);
listView = (ListView) findViewById(R.id.list);
try {
mUser = getUserFromBundle();
}catch (NullPointerException e){
Log.e(TAG, "NullPointerException: " + e.getMessage());
Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show();
getSupportFragmentManager().popBackStack();
}
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
// Start sign in/sign up activity
startActivityForResult(AuthUI.getInstance()
.createSignInIntentBuilder()
.build(), SIGN_IN_REQUEST_CODE);
} else {
// User is already signed in, show list of messages
getMessagesCount();
showAllOldMessages();
}
Log.d(TAG, "onCreate: USER SELECT TO CHAT WITH********************** " + mUser.getUser_id());
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//messagesCount = 0;
getMessagesCount();
if (input.getText().toString().trim().equals("")) {
Toast.makeText(ChatActivity.this, "Please enter some texts!", Toast.LENGTH_SHORT).show();
} else {
Log.d(TAG, "onDataChange: Messages -- BEFORE 2 *******************************" + messagesCount);
//messagesCount = 0;
myRef.child(getString(R.string.dbname_messages))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(mUser.getUser_id())
.child(String.valueOf(messagesCount + 1))
.setValue(new ChatMessage(input.getText().toString(),
FirebaseAuth.getInstance().getCurrentUser().getEmail(),
FirebaseAuth.getInstance().getCurrentUser().getUid())
);
//getMessagesCount();
Log.d(TAG, "onDataChange: Messages AFTER 1 --- *******************************" + messagesCount);
myRef.child(getString(R.string.dbname_messages))
.child(mUser.getUser_id())
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(String.valueOf(messagesCount))
.setValue(new ChatMessage(input.getText().toString(),
FirebaseAuth.getInstance().getCurrentUser().getEmail(),
FirebaseAuth.getInstance().getCurrentUser().getUid())
);
Log.d(TAG, "onDataChange: Messages AFTER 2 --- *******************************" + messagesCount);
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SIGN_IN_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "Signed in successful!", Toast.LENGTH_LONG).show();
showAllOldMessages();
} else {
Toast.makeText(this, "Sign in failed, please try again later", Toast.LENGTH_LONG).show();
finish();
}
}
}
private void showAllOldMessages() {
loggedInUserName = FirebaseAuth.getInstance().getCurrentUser().getUid();
Log.d("Main", "user id: " + loggedInUserName);
adapter = new MessageAdapter(this, ChatMessage.class, R.layout.item_in_message,
FirebaseDatabase.getInstance().getReference().child(getString(R.string.dbname_messages))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(mUser.getUser_id()));
listView.setAdapter(adapter);
}
private User getUserFromBundle(){
Bundle bundle = getIntent().getExtras();
if(bundle != null){
return bundle.getParcelable(getString(R.string.intent_user));
}else{
return null;
}
}
private void getMessagesCount(){
//messagesCount = 0;
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child(getString(R.string.dbname_messages))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(mUser.getUser_id());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
for(com.google.firebase.database.DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
Log.d(TAG, "onDataChange: found post:" + singleSnapshot.getValue());
messagesCount++;
}
Log.d(TAG, "onDataChange: Messages *******************************" + messagesCount);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
画像:https://i.stack.imgur.com/qc3e9.png
ありがとうフランク・ヴァン・プフレン。 – TheRapidSloth