Я довольно новичок в разработке для Android, хотя я хотел создать приложение для чата. Вход и регистрация с использованием Firebase auth работают хорошо, общение в целом тоже. Но я хотел создать лучший внешний вид и искал методы о том, как сделать вырез ListView. Но ни один учебник не показал метод, использующий данные Firebase, поэтому я отчаянно попробовал его самостоятельно. К сожалению, это дает мне странный вывод на моем телефоне. Он показывает стандартный значок запуска в ImageView, который должен быть изображением профиля пользователя. В одном TextView показан какой-то странный вывод, например: com.glowchat.app.DataClass@3012dc4 -> Glowchat - название моего приложения. DataClass - это класс в моем пакете com.glowchat.app. Второй TextView не показывает никаких изменений, он показывает «[Сообщение]», как и должно, если изменение текста не сработало. Я уверен, что следующий код - полная фигня, но спасибо за просмотр и попытку помочь мне.
PS: я оставил старый стандартный адаптер, чтобы легко переключаться между ними в целях тестирования, так что не запутайтесь в этом.
TestserverActivity.java
package com.glowchat.app;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
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.net.URL;
import java.util.ArrayList;
public class TestserverActivity extends AppCompatActivity {
private Button sendbutton;
private EditText sendmessage;
private ListView data;
private ArrayList<String> arrayList = new ArrayList<>();
private ArrayList<DataClass> arrList = new ArrayList<>();
private ArrayAdapter<String> adapter;
private ArrayAdapter<DataClass> adap;
private DatabaseReference database;
private FirebaseUser user;
private FirebaseAuth auth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testserver);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
adap = new ArrayAdapter<DataClass>(this, R.layout.datadisplay, R.id.displayname, arrList);
auth = FirebaseAuth.getInstance();
database = FirebaseDatabase.getInstance().getReference().child("Testserverdata");
user = auth.getCurrentUser();
sendbutton = (Button) findViewById(R.id.serversendbutton);
sendmessage = (EditText) findViewById(R.id.serversendmessage);
data = (ListView) findViewById(R.id.serverdata);
sendbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(sendmessage.getText().toString().isEmpty()) {
} else {
database.push().setValue(sendmessage.getText().toString());
sendmessage.setText("");
}
}
});
database.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
String string = dataSnapshot.getValue(String.class);
String tmpname = user.getEmail();
String tmpmessage = string;
Uri image = user.getPhotoUrl();
arrList.add(new DataClass(tmpname, tmpmessage, image));
adap.notifyDataSetChanged();
data.setAdapter(adap);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
ChatAdapter.java
package com.glowchat.app;
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 java.util.ArrayList;
public class ChatAdapter extends BaseAdapter {
Context context;
ArrayList<DataClass> arrList;
public ChatAdapter(Context context, ArrayList<DataClass> arrList) {
this.context = context;
this.arrList = arrList;
}
@Override
public int getCount() {
return arrList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(context).inflate(R.layout.datadisplay, parent, false);
TextView name = (TextView) convertView.findViewById(R.id.displayname);
TextView message = (TextView) convertView.findViewById(R.id.displaymessage);
ImageView image = (ImageView) convertView.findViewById(R.id.profilepic);
name.setText(arrList.get(position).getName());
message.setText(arrList.get(position).getMessage());
image.setImageURI(arrList.get(position).getImage());
return convertView;
}
}
DataClass.java
package com.glowchat.app;
import android.net.Uri;
public class DataClass {
String name;
String message;
Uri image;
public DataClass(String name, String message, Uri image) {
this.name = name;
this.message = message;
this.image = image;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Uri getImage() {
return image;
}
public void setImage(Uri image) {
this.image = image;
}
}
Данные JSON Firebase:
{
"Testserverdata" : {
"-LdXa2gqdIND7Pk6094N" : "Hello",
"-LdXbb_1Fvh0jxsC5zYx" : "u4witsit",
"-LdXblvyFdMW9XMnbYpW" : "jgug",
"-LdXtP9ZzjL_a4A4Yqqf" : "moin",
"-LdYDEBP-ikhIyYWnh3r" : "zgxcc",
"-LdYEwHcWLzUhM9Rjp4y" : "jfufuru",
"-LdYwkwKkuxm9plle4hZ" : "hcch",
"-LdZFhvuXuIJIMRSECNO" : "fjdvve",
"-LdZFjM7DMr9krCGGei4" : "Nsjabwbs",
"-LdZNpphDsXfG5JDGd1a" : "uxx"
}
}