android firebase чат из хелпа не заработал
Прытался по туториалу https://code.tutsplus.com/ru/tutorials/how-to-create-an-android-chat-app-using-firebase--cms-27397 сделать чат на android studio 2021.1.1 path 1. Вопросов осталось от изучения этой темы больше, чем ответов :) Может кто подскажет. В коде из статьи, вот кусок который должен запускать экран входа и регистрации, но если AuthUI это FirebaseAuth у меня ругается на .createSignInIntentBuilder() что не знает такой команды. сделал временно через signInWithEmailAndPassword(emailAddress,password) для регистрации юзера к базе. Соответственно окно регистрации надо самому рисовать.
if(FirebaseAuth.getInstance().getCurrentUser() == null) {
// Start sign in/sign up activity
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.build(),
SIGN_IN_REQUEST_CODE
);
Так же на команду private FirebaseListAdapter adapter; андройд говорит что не знает такого адаптера.
FirebaseUI имеет очень удобный класс под названием FirebaseListAdapter, что значительно снижает попытки, необходимые для заполнения ListView, используя данные, имеющиеся в базе данных Firebase. Сейчас мы будем использовать его для извлечения и отображения всех объектов ChatMessage, которые присутствуют в базе данных.
Сделал через обычный перебор всех данных из базы в цикле и сохранение этого в ArrayList Условно чат я написал, но думаю, что неэффективными методами. В build.gradle андройд сам добавил нужные строки по firebase
**MainActivity.java**
package com.example.mychat03;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.FirebaseDatabase;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class MainActivity<bucCloseOnClickList> extends AppCompatActivity {
private FirebaseAuth mAuth;
String TAG="TAVKA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(setOnClickListenerFAB);
FirebaseAuth auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
Log.d(TAG, "Already signed in");
} else {
Log.d(TAG, "not signed");
String emailAddress = "[email protected]";
String password = "123456";
auth.signInWithEmailAndPassword(emailAddress,password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// User signed in successfully
Log.d(TAG, "User signed in successfully");
}
}
});
}
// Load chat room contents
displayChatMessages();
}
void displayChatMessages(){
FirebaseDatabase
.getInstance()
.getReference()
.get()
.addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
ListView lv =(ListView) findViewById(R.id.list_of_messages);
if (task.isComplete()) {
HashMap<String, String> result = (HashMap) task.getResult().getValue();
//Выбираем все ключи:
// for (String key : result.keySet()) { Log.d(TAG, "Key: " + key); }
List<String> messageStrings = new ArrayList<String>();
for (DataSnapshot data : task.getResult().getChildren()){
//Log.d(TAG,String.valueOf(data.getValue()));
String Chattext = data.child("messageText").getValue(String.class);
String Chatuser = data.child("messageUser").getValue(String.class);
Long messageTime = data.child("messageTime").getValue(Long.class);
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
String dateString = formatter.format(new Date(messageTime));
messageStrings.add("("+dateString+") "+Chatuser+": "+Chattext);
}
ArrayAdapter adapter_xz = new ArrayAdapter<String>(MainActivity.this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, messageStrings);
ListView listView = (ListView) findViewById(R.id.list_of_messages);
listView.setAdapter(adapter_xz);
} else {
Log.d(TAG, "FB onComplete: Fail!!!");
}
}
});
}
View.OnClickListener setOnClickListenerFAB= new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText input = (EditText)findViewById(R.id.inputTextChat);
// Read the input field and push a new instance
// of ChatMessage to the Firebase database
Task<Void> voidTask = FirebaseDatabase.getInstance()
.getReference()
.push()
.setValue(new ChatMessage2(input.getText().toString(),
FirebaseAuth.getInstance()
.getCurrentUser()
// .getDisplayName()
.getEmail()
)
);
input.setText("");
displayChatMessages();
}
};
View.OnClickListener bucCloseOnClickList = new View.OnClickListener() {
@Override
public void onClick(View view) {
mAuth.getInstance().signOut();
Log.d(TAG, "User signOut ");
finish();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_sign_out) {
mAuth.getInstance().signOut();
Log.d(TAG, "User signOut ");
finish();
}
return true;
}
private class ChatMessage2 {
private String messageText;
private String messageUser;
private long messageTime;
public ChatMessage2(String messageText, String messageUser) {
this.messageText = messageText;
this.messageUser = messageUser;
messageTime = new Date().getTime();
}
public ChatMessage2(){
}
public String getMessageText() {
return messageText;
}
public void setMessageText(String messageText) {
this.messageText = messageText;
}
public String getMessageUser() {
return messageUser;
}
public void setMessageUser(String messageUser) {
this.messageUser = messageUser;
}
public long getMessageTime() {
return messageTime;
}
public void setMessageTime(long messageTime) {
this.messageTime = messageTime;
}
}
}
**build.gradle(app)**
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.mychat03"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.0'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.google.firebase:firebase-analytics:21.1.1'
implementation 'com.google.firebase:firebase-auth:21.0.8'
implementation 'com.google.android.gms:play-services-auth:20.1.0'
implementation 'com.google.firebase:firebase-database:20.0.6'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
/////////
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:30.4.1')
}