- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图在 Listview
中列出一些用户详细信息,每行显示 4 个字符串。
字符串来自Firebase
。
我总是得到一些错误。关于错误原因或任何其他解决方案的任何想法?
这是我的代码:
主要 Activity
public class SearchActivity extends AppCompatActivity {
private ListView mListView;
//public ArrayList<String> mUser = new ArrayList<>();
private String userID;
private String Lat;
private String Lng;
private Button mRefresh;
private String Name;
private String Birthday;
private String Gender;
private String Email;
private FirebaseAuth mAuth = FirebaseAuth.getInstance();
private FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
private DatabaseReference DatabaseReference = firebaseDatabase.getReference();
//private DatabaseReference DatabaseReference = firebaseDatabase.getReference().child("Users/");
//private DatabaseReference CoordenateReference = firebaseDatabase.getReference().child("Coordenate/");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
mListView = findViewById(R.id.listViewSearch);
FirebaseUser user = mAuth.getCurrentUser();
userID = user.getUid();
mRefresh = findViewById(R.id.buttonRefresh);
mRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listClean();
FirebaseUser user = mAuth.getCurrentUser();
userID = user.getUid();
Lat = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lat").getValue(String.class);
Lng = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lng").getValue(String.class);
DataSnapshot dS = dataSnapshot.child("Coordenate").child(Lat).child(Lng);
for(DataSnapshot Ds : dS.getChildren()) {
Object key = Ds.getKey();
String StringKey = String.valueOf(key);
getname(StringKey);
//mUser.add(getName(StringKey));
//mUser.add(Name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(SearchActivity.this,"Error 404",Toast.LENGTH_SHORT).show();
}
});
}
});
}
private void getname(String ID){
final String IDfinal = ID;
Toast.makeText(SearchActivity.this,ID,Toast.LENGTH_SHORT).show();
DatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Name = dataSnapshot.child("Users").child(IDfinal).child("name").getValue(String.class);
Email = dataSnapshot.child("Users").child(IDfinal).child("email").getValue(String.class);
Gender = dataSnapshot.child("Users").child(IDfinal).child("gender").getValue(String.class);
Birthday = dataSnapshot.child("Users").child(IDfinal).child("data_birth").getValue(String.class);
list();
Toast.makeText(SearchActivity.this,Name,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(SearchActivity.this,"Error 404",Toast.LENGTH_SHORT).show();
}
});
}
private void list(){
//final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mUser);
//mListView.setAdapter(new customAdapter(this,new String[]{Name}));
//mUser.add(Name);
//arrayAdapter.notifyDataSetChanged();
setContentView(R.layout.activity_search);
List<UserInformation> userInformationsList = new ArrayList<>();
UserInformation userInformation = new UserInformation(Name,Email,Gender,Birthday);
userInformationsList.add(userInformation);
customAdapter customAdapterIntent= new customAdapter((ValueEventListener) this,R.layout.userslist,userInformationsList);
mListView.setAdapter(customAdapterIntent);
}
}
这是用户列表.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textNameList"
android:textSize="25dp"
android:textAlignment="textStart"
android:text="Name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_margin="10dp"/>
<TextView
android:id="@+id/textEmailList"
android:textSize="15dp"
android:textAlignment="textStart"
android:text="Age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_margin="10dp"/>
<TextView
android:id="@+id/textBirthdayList"
android:textSize="15dp"
android:textAlignment="textStart"
android:text="Birthday"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_margin="10dp"/>
<TextView
android:id="@+id/textGenderList"
android:textSize="15dp"
android:textAlignment="textStart"
android:text="gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_margin="10dp"/>
这是Userinformation.java
public class UserInformation {
private static String Name;
private static String Gender;
private static String Email;
private static String Birthday;
public UserInformation(String Name,String Gender,String Email,String Birthday){
this.Birthday=Birthday;
this.Email=Email;
this.Gender=Gender;
this.Name=Name;
}
public static String getName(){return Name;}
public static String getEmail(){return Email;}
public static String getGender(){return Gender;}
public static String getBirthday(){return Birthday;}
}
这是适配器
public class customAdapter extends ArrayAdapter<UserInformation> {
public customAdapter(ValueEventListener context, int layoutResource,
List<UserInformation> userInformationsList) {
super((Context) context, layoutResource, userInformationsList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
view = layoutInflater.inflate(R.layout.userslist, null);
}
UserInformation userInformation = getItem(position);
if (userInformation != null) {
TextView Name = (TextView) view.findViewById(R.id.textNameList);
//name.setText(name[position]);
TextView email = (TextView) view.findViewById(R.id.textEmailList);
//email.setText(Email[position]);
TextView gender = (TextView) view.findViewById(R.id.textGenderList);
//gender.setText(Gender[position]);
TextView birthday = (TextView) view.findViewById(R.id.textBirthdayList);
//birthday.setText(Birthday[position]);
if (Name != null) {
Name.setText(UserInformation.getName());
}
if (email != null) {
email.setText(UserInformation.getEmail());
}
if (gender != null) {
gender.setText(UserInformation.getGender());
}
if (birthday != null) {
birthday.setText(UserInformation.getBirthday());
}
}
return view;
}
}
这是错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.enrik.afrodita, PID: 2629
java.lang.ClassCastException:
com.example.enrik.afrodita.SearchActivity cannot be cast to
com.google.firebase.database.ValueEventListener
at
com.example.enrik.afrodita.SearchActivity.list(SearchActivity.java:130)
at
com.example.enrik.afodita.SearchActivity.access$1100(SearchActivity.java:24)
at
com.example.enrik.adita.Searchivity$2.onDataChange(SearchActivity.java:106)
at com.google.android.gms.internal.zzdtn.zza(Unknown Source)
at com.google.android.gms.internal.zzdvi.zzbur(Unknown Source)
at com.google.android.gms.internal.zzdvo.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
最佳答案
您需要传递 Context
而不是 ValueEventListener
因此将适配器更改为
public customAdapter(/*ValueEventListener*/ Context context, int layoutResource,
List<UserInformation> userInformationsList) {
super(context, layoutResource, userInformationsList);
}
同时删除类型转换
customAdapter customAdapterIntent= new customAdapter(/*(ValueEventListener)*/ this,R.layout.userslist,userInformationsList);
当您调用 getContext()
时,layoutinflater
或适配器需要 context
来访问资源
并从 list
方法中删除 setContentView(R.layout.activity_search);
,你做了两次,所以不需要
Thank so much, I did as you said and It works but it only list the last user's information
您需要获取所有用户并将它们添加到 list
中,因为当前您将最后一个用户的信息存储为字符串值并使用这些值创建单个用户对象的列表。
// outside onCreate
List<UserInformation> users = new ArrayList<>();
mRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listClean();
FirebaseUser user = mAuth.getCurrentUser();
userID = user.getUid();
Lat = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lat").getValue(String.class);
Lng = dataSnapshot.child("Users").child(userID).child("Coordenates/Rute/Lng").getValue(String.class);
DataSnapshot dS = dataSnapshot.child("Coordenate").child(Lat).child(Lng);
for(DataSnapshot Ds : dS.getChildren()) {
Object key = Ds.getKey();
String StringKey = String.valueOf(key);
// fetch the user Object based on key and add it to list
users.add(lidataSnapshot.child("Users").child(StringKey).getValue(UserInformation.class));
}
// now display list with all user information
customAdapter customAdapterIntent= new customAdapter(SearchActivity.this,
R.layout.userslist,
users);
mListView.setAdapter(customAdapterIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(SearchActivity.this,"Error 404",Toast.LENGTH_SHORT).show();
}
});
}
});
关于java - 自定义适配器 ListView 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47813917/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!