- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然我想制作一个聊天应用程序,但我对 android studio 开发还很陌生。使用 Firebase 身份验证的登录和注册运行良好,一般聊天也是如此。但我想创建一个更好的外观,并搜索了如何制作自定义 ListView 的方法。但没有教程展示使用 firebase 数据的方法,所以我拼命地自己尝试。可悲的是,它在我的手机上给了我一个奇怪的输出。它在 ImageView 中显示标准启动器图标,该图标应该是用户的个人资料图片。一个 TextView 显示一些奇怪的输出,例如: com.glowchat.app.DataClass@3012dc4 -> Glowchat 是我的应用程序的名称。 DataClass 是我的包 com.glowchat.app 中的一个类。第二个 TextView 不显示任何更改,如果文本更改不起作用,它应该显示“[Message]”。我确信下面的代码完全是垃圾,但感谢您查看它并尝试帮助我。
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;
}
}
<小时/>
Firebase JSON 数据:
{
"Testserverdata" : {
"-LdXa2gqdIND7Pk6094N" : "Hello",
"-LdXbb_1Fvh0jxsC5zYx" : "u4witsit",
"-LdXblvyFdMW9XMnbYpW" : "jgug",
"-LdXtP9ZzjL_a4A4Yqqf" : "moin",
"-LdYDEBP-ikhIyYWnh3r" : "zgxcc",
"-LdYEwHcWLzUhM9Rjp4y" : "jfufuru",
"-LdYwkwKkuxm9plle4hZ" : "hcch",
"-LdZFhvuXuIJIMRSECNO" : "fjdvve",
"-LdZFjM7DMr9krCGGei4" : "Nsjabwbs",
"-LdZNpphDsXfG5JDGd1a" : "uxx"
}
}
最佳答案
当您从 Firebase 获取数据时,您正在执行以下操作:
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, ));
adap.notifyDataSetChanged();
data.setAdapter(adap);
}
在 onDataChange
的第一行中,您将获取 dataSnapshot
的字符串值:dataSnapshot.getValue(String.class)
。这意味着数据库中的任何 JSON 值或对象都会转换为字符串。
如果您有一个 JSON 对象,您更有可能希望执行 dataSnapshot.getValue(DataClass.class)
,然后从结果对象中获取正确的属性。
关于java - Android studio : CutomListView gives strange output, 它应该提供 firebase 数据。有什么解决办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891154/
我开发了一个具有基本安全性的 Spring Boot 应用程序。我有两个具有相同路径和不同 http 方法的端点。当我使用默认密码/使用 application.yml 中给出的密码包含基本安全性时,
我的代码是这样的: 或者,像这样: 如果我首先列出 webm 源,Firefox 4 会播放它,但 Firefox 3.6 也会尝试播放它(但会失败,因为它不支持 webm)。
我希望提供一个泛型类型作为类型参数而不首先将其解析为具体类型。换句话说,我正在寻找一种方法来指定从基类继承时可以使用的类型映射函数。 示例(不正确的)语法,希望比我能解释得更好: abstract c
我在 .NET 中编写了一些桌面应用程序,它们既提供了用于正常使用的前端 GUI,也提供了用于其他需求(例如扩展、调度、自动化、高级使用等)的命令行界面。命名两个可执行文件的最佳做法是什么,因为它们构
我最近在这里思考了很多关于屏幕抓取以及它可能是一项什么样的任务。所以我提出以下问题。 作为网站开发人员,您是否会公开简单的 API 以防止用户抓取屏幕,例如 JSON 结果? 然后这些结果可以实现缓存
我正在为一个项目使用 Dojo 1.9,但我不明白 dojo.provide 的正确替代方案与传统风格相比,AMD 风格。我正在阅读 this文档页面。 很明显,这就是旧语法映射到新语法的方式: 旧
我正在开发一个 Angular 应用程序。当我使用 ng serve 正常运行它时,它运行没有任何错误.但是,当我运行 ng build --prod ,它给出了以下错误。 ERROR in Ille
我有一个 Mac 应用程序。在我的 Mac 应用程序中,我的屏幕之一有一个包含文本字段的 scrollView。在同一屏幕上,我有一个需要提供打印选项的按钮。可以打印文本字段的文本。打印按钮应调用 M
我已经成功地为普通媒体文件提供媒体文件,但是当我尝试提供管理媒体文件时,我失败了。请帮我找出问题所在,因为我已经尝试解决问题几个小时但没有运气(也一直在谷歌搜索并阅读有关提供静态文件的 django
我正在尝试创建一个简单的错误处理项目,它会在收到错误(例如 404、422 或 500)后为 JSON 提供错误数据。我使用来自 this 的代码网站,但它不适合我。 我实际上有这两个类: 基本 Co
假设我有一个名为 Number 的类(class),我打算对 Number 进行大量相等比较对象。我担心通用 Number::equals(Object o) 的“开销”(类比较等...)方法。在这种
假定以下情况: 对等方A只希望将音频流发送给对等方B 对等B只希望将视频流发送给对等A 从而, 与创建报价 var sdpConstraints = { “必填”:{ 'OfferToReceiveA
因为我有一些角度,所以我想检查角度模数 360°: double angle = 0; double expectedAngle = 360; angle.Should().B
这是我的程序中构建的 monad 堆栈: type Px a = ReaderT PConf (State PState) a 其中 PConf 和 PState 是保存应用程序的配置和状态的任意数据
因为我有一些角度,所以我想检查角度模数 360°: double angle = 0; double expectedAngle = 360; angle.Should().B
我有一个小程序需要以某些权限运行,这意味着加载时会显示一条警告消息。如果用户拒绝警告消息,我想重定向到错误页面并解释发生了什么。有什么办法可以做到这一点吗? 我研究过让计时器运行并在特定时间段后重定向
从我可以从 Firebase 文档中推断出,似乎需要服务器来提供静态内容(html和 javascript),所以你需要有一台托管机器和一个静态内容服务器在某处启动并运行,或某些服务托管静态站点。 对
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我的项目根目录的静态文件夹中有一个文本文件。 我想提供它,所以我创建了: @csrf_exempt def display_text(request): content = retur
我目前正在研究指针,为了进一步理解我正在尝试使用指针将两个数值数组连接成一个。代码如下所示。 #include void concat(int **pa,int **pb,int **pc) {
我是一名优秀的程序员,十分优秀!