- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我只是想将 Firebase 数据库中的数据填充到我的 recyclerview 中。我的 recyclerview 显示完美,但适配器不会将值设置为 recyclerview textview 中的文本,它只是说“在类 com.example.barry.starcity.StreetClass 上找不到 -L57t4-97c3dLZjA_yXC 的 setter /字段”。这让我觉得我没有正确制作我的 setter,但 Android Studio 会自动生成。我不知道我在这里错过了什么。感谢您的帮助。
节点对象
class StreetClass {
private String id;
private String semail;
private String sname;
private String stype;
private String sdetail;
private String slocation;
private String sdate;
private String imgurl;
public StreetClass(){
}
public String getImgurl() {
return imgurl;
}
public void setImgurl(String imgurl) {
this.imgurl = imgurl;
}
public String getId() {return id;}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return semail;
}
public void setEmail(String email) {
this.semail = email;
}
public String getName() {
return sname;
}
public void setName(String name) {
this.sname = name;
}
public String getType() {
return stype;
}
public void setType(String type) {
this.stype = type;
}
public String getDetail() {
return sdetail;
}
public void setDetail(String detail) {
this.sdetail = detail;
}
public String getLocation() {
return slocation;
}
public void setLocation(String location) {
this.slocation = location;
}
public String getDate() {
return sdate;
}
public void setDate(String date) {
this.sdate = date;
}
}
RecyclerViewAdapter
public class RecyclerViewAdapter extends
RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
Context context;
List<StreetClass>listdata ;
public RecyclerViewAdapter(Context context, List<StreetClass> list) {
this.listdata = list;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
StreetClass AllDetails = listdata.get(position);
holder.NameTextView.setText(AllDetails.getName());
holder.DetailTextView.setText(AllDetails.getDetail());
holder.EmailTextView.setText(AllDetails.getEmail());
holder.DateTextView.setText(AllDetails.getDate());
holder.LocationTextView.setText(AllDetails.getLocation());
holder.TypeTextView.setText(AllDetails.getType());
}
@Override
public int getItemCount() {
return listdata.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public TextView NameTextView;
public TextView DetailTextView;
public TextView EmailTextView;
public TextView DateTextView;
public TextView LocationTextView;
public TextView TypeTextView;
/*public ImageView ImageTextView;*/
public ViewHolder(View itemView) {
super(itemView);
NameTextView = itemView.findViewById(R.id.ShowNameTextView);
DetailTextView = itemView.findViewById(R.id.ShowDetailTextView);
EmailTextView = itemView.findViewById(R.id.ShowEmailTextView);
DateTextView = itemView.findViewById(R.id.ShowDateTextView);
LocationTextView = itemView.findViewById(R.id.ShowLocationTextView);
TypeTextView = itemView.findViewById(R.id.ShowTypeTextView)
}
}
}
主 Activity
public class StatusFragment extends Fragment {
DatabaseReference databaseStatus;
ProgressDialog progressDialog;
List<StreetClass> list = new ArrayList<StreetClass>();
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
public StatusFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_status, container, false);
recyclerView = rootView.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext().getApplicationContext()));
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Loading Data from Firebase Database");
progressDialog.show();
databaseStatus = FirebaseDatabase.getInstance().getReference().child("Street Problems");
databaseStatus.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
StreetClass streetClass = dataSnapshot.getValue(StreetClass.class);
list.add(streetClass);
}
adapter = new RecyclerViewAdapter(getContext().getApplicationContext(), list);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
progressDialog.dismiss();
}
@Override
public void onCancelled(DatabaseError databaseError) {
progressDialog.dismiss();
}
});
return rootView;
}
以及项目的布局:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
card_view:cardElevation="5dp"
card_view:contentPadding="5dp"
card_view:cardCornerRadius="5dp"
card_view:cardMaxElevation="5dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ECEFF1"
android:padding="10dp">
<TextView
android:id="@+id/Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Student Name: "
android:textColor="#000"
android:textSize="10dp" />
<TextView
android:id="@+id/Detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Detail: "
android:textColor="#000"
android:textSize="10dp"
android:layout_below="@+id/Name"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/Email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Email: "
android:textColor="#000"
android:textSize="10dp"
android:layout_below="@+id/Detail"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Date: "
android:textColor="#000"
android:textSize="10dp"
android:layout_below="@+id/Email"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/Location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Location "
android:textColor="#000"
android:textSize="10dp"
android:layout_below="@+id/Date"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<!-- <TextView
android:id="@+id/Image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Type"
android:layout_toStartOf="@+id/ShowNameTextView"
android:text="Uploaded image: "
android:textColor="#000"
android:textSize="10dp" />-->
<TextView
android:id="@+id/Type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Type: "
android:textColor="#000"
android:textSize="10dp"
android:layout_below="@+id/Location"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/ShowNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Show Student Name"
android:textColor="#000"
android:textSize="10dp"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/Name"
android:layout_toEndOf="@+id/Name"
android:layout_marginLeft="19dp"
android:layout_marginStart="19dp" />
<TextView
android:id="@+id/ShowDetailTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/ShowNameTextView"
android:layout_below="@+id/ShowNameTextView"
android:gravity="center"
android:text="Show Detail"
android:textColor="#000"
android:textSize="10dp" />
<TextView
android:id="@+id/ShowEmailTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/ShowNameTextView"
android:layout_below="@+id/ShowDetailTextView"
android:gravity="center"
android:text="Show Email"
android:textColor="#000"
android:textSize="10dp" />
<TextView
android:id="@+id/ShowDateTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/ShowEmailTextView"
android:layout_below="@+id/ShowEmailTextView"
android:gravity="center"
android:text="Show Date"
android:textColor="#000"
android:textSize="10dp" />
<TextView
android:id="@+id/ShowLocationTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/ShowDateTextView"
android:layout_below="@+id/ShowDateTextView"
android:gravity="center"
android:text="Show Location"
android:textColor="#000"
android:textSize="10dp" />
<TextView
android:id="@+id/ShowTypeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/ShowDateTextView"
android:layout_below="@+id/ShowLocationTextView"
android:gravity="center"
android:text="Show Type"
android:textColor="#000"
android:textSize="10dp" />
<!-- <android.support.v7.widget.AppCompatImageView
android:id="@+id/ShowImageView"
android:layout_width="90dp"
android:layout_height="50dp"
android:layout_alignStart="@+id/ShowTypeTextView"
android:layout_below="@+id/ShowTypeTextView" />-->
</RelativeLayout>
</android.support.v7.widget.CardView>
这是我的数据库结构
java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)' on a
null object reference
这是我的日志猫
最佳答案
即使我看不到您的数据库结构,我也可以从您的代码中得知您在 Street Problems
下请求所有内容,其中包括您之前推送的所有对象。我可以从错误消息中看到它正在尝试为推送 ID -L57t4-97c3dLZjA_yXC
找到它在 Street Problems
节点下找到的 setter 或字段。如果您想获得单个对象,您将不得不深入研究 Street Problems
下的推送 ID 中的对象。您的代码应如下所示:
dataSnapshot.child("Street Problems/-L57t4-97c3dLZjA_yXC").getValue(StreetClass.class);
如果您想要所有 StreetClass
对象,那么只需像这样遍历其子对象:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference yourRef = rootRef.child("Street Problems");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
for(DataSnapshot dSnapshot : ds.getChildren()) {
StreetClass streetClass = dSnapshot.getValue(StreetClass.class);
Log.d("TAG", streetClass.getName());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);
这是一个关于如何使用 getName()
方法显示名称的示例。
编辑:
正如我在您更新的问题中看到的那样,警告是因为您的字段和您的 setter 之间的大小写不匹配。
您有一个名为的字段和相应的不正确的 setter 和 getter!
private String sname;
public String getName() {
return sname;
}
public void setName(String name) {
this.sname = name;
}
正确的 setter 和 getter 应该是:
public String getSname() {
return sname;
}
public void setSname(String name) {
this.sname = name;
}
其他领域也存在同样的问题。
这是构建模型类的正确方法:
public class StreetClass {
private String id;
private String semail;
private String sname;
private String stype;
private String sdetail;
private String slocation;
private String sdate;
private String imgurl;
public StreetClass(){}
public StreetClass(String id, String semail, String sname, String stype, String sdetail, String slocation, String sdate, String imgurl) {
this.id = id;
this.semail = semail;
this.sname = sname;
this.stype = stype;
this.sdetail = sdetail;
this.slocation = slocation;
this.sdate = sdate;
this.imgurl = imgurl;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSemail() {
return semail;
}
public void setSemail(String semail) {
this.semail = semail;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getStype() {
return stype;
}
public void setStype(String stype) {
this.stype = stype;
}
public String getSdetail() {
return sdetail;
}
public void setSdetail(String sdetail) {
this.sdetail = sdetail;
}
public String getSlocation() {
return slocation;
}
public void setSlocation(String slocation) {
this.slocation = slocation;
}
public String getSdate() {
return sdate;
}
public void setSdate(String sdate) {
this.sdate = sdate;
}
public String getImgurl() {
return imgurl;
}
public void setImgurl(String imgurl) {
this.imgurl = imgurl;
}
}
您还可以使用如下所示的 String 类:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference yourRef = rootRef.child("Street Problems");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
for(DataSnapshot dSnapshot : ds.getChildren()) {
String sname = dSnapshot.child("sname").getValue(String.class);
Log.d("TAG", sname);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);
关于java - 带类映射器 : No setter/field for class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48742022/
运行 PostgreSQL(7.4 和 8.x),我认为这是可行的,但现在我遇到了错误。 我可以单独运行查询,它工作得很好,但如果我使用 UNION 或 UNION ALL,它会抛出错误。 这个错误:
我试图为我的应用程序创建一个导航,使用抽屉导航我的 fragment 之一(HomeFragment)有一个 ViewPager,可容纳 3 个 fragment (Bundy Clock、Annou
以我目前正在开发的应用为例: - 它有一个包含多个项目的抽屉导航;现在有两个项目让我感兴趣,我将它们称为 X 和 Y。 X 和 Y 都在单击时显示包含 x 元素或 y 元素列表的 fragment 选
我有一个形状为 (370,275,210) 的 NumPy 数组,我想将其重新整形为 (275,210,370)。我将如何在 Python 中实现这一点? 370是波段数,275是行数,210是图像包
我们如何与被子 UIViewController 阻止的父 UIViewController(具有按钮)交互。显然,触摸事件不会通过子 Nib 。 (启用用户交互) 注意:我正在加载默认和自定义 NI
我是 Jpa 新手,我想执行过程 我的代码如下 private static final String PERSISTENCE_UNIT_NAME = "todos"; private static
与安装了 LAMP 的 GCE 相比,选择与 Google Cloud SQL 链接的 GCE 实例有哪些优势? 我确定 GCE 是可扩展的,但是安装在其上的 mysql 数据库的可扩展性如何? 使用
这个问题在这里已经有了答案: Value receiver vs. pointer receiver (3 个答案) 关闭 3 年前。 我刚接触 golang。只是想了解为 Calc 类型声明的两种
我不小心按了一个快捷键,一个非常漂亮的断线出现在日期上。 有点像 # 23 Jun 2010 -------------------- 有人知道有问题的快捷方式吗?? (我在 mac 上工作!) 在
我正在Scala中编写正则表达式 val regex = "^foo.*$".r 这很好,但是如果我想做 var x = "foo" val regex = s"""^$x.*$""".r 现在我们有
以下 XML 文档在技术上是否相同? James Dean 19 和: James Dean 19 最佳答案 这两个文档在语义上是相同的。在 X
我在对数据帧列表运行稳健的线性回归模型(使用 MASS 库中的 rlm)时遇到问题。 可重现的示例: var1 <- c(1:100) var2 <- var1*var1 df1 <- data.f
好的,我有一个自定义数字键盘,可以在标签(numberField)中将数字显示为 0.00,现在我需要它显示 $0.00。 NSString *digit = sender.currentTitle;
在基于文档的应用程序中,使用 XIB 文件,创建新窗口时其行为是: 根据最后一个事件的位置进行定位和调整大小 window 。 如果最后一个事件窗口仍然可见,则新窗口 窗口应该是级联的,这样它就不会直
我想使用参数进行查询,如下所示: SELECT * FROM MATABLE WHERE MT_ID IN (368134, 181956) 所以我考虑一下 SELECT * FROM MATABLE
我遇到一些性能问题。 我有一个大约有 200 万行的表。 CREATE TABLE [dbo].[M8]( [M8_ID] [int] IDENTITY(1,1) NOT NULL,
我在 jquery 中的按键功能遇到问题。我不知道为什么按键功能不起作用。我已经使用了正确的 key 代码。在我的函数中有 2 个代码,其中包含 2 个事件键,按一个键表示 (+) 代码 107 和(
我想显示音频波形,我得到了此代码,它需要.raw音频输入并显示音频波形,但是当我放入.3gp,.mp3音频时,我得到白噪声,有人可以帮助我如何使其按需与.3gp一起使用使用.3gp音频运行它。 Inp
我无法让 stristr 函数返回真值,我相信这是因为我的搜索中有一个 $ 字符。 当我这样做时: var_dump($nopricecart); 完整的 $nopricecart 值是 $0 ,我得
如果我有这样的循环: for(int i=0;i O(n) 次。所以do some执行了O(n)次。如果做某事是线性时间,那么代码片段的复杂度是O(n^2)。 关于algorithm - 带 If 语
我是一名优秀的程序员,十分优秀!