所以我试图使用一些文档在应用程序中实现Recycler视图。第一次效果很好。但是请不要做我所做的事情,或者我的应用程序在该视图上开始崩溃。
File ".\aws_iam_utils.py", line 1430, in rotate_access_keys
if key1:
UnboundLocalError: local variable 'key1' referenced before assignment
这是我在崩溃报告中捕获的错误列表,我无法理解这里缺少的内容。
2019-04-25 20:59:29.237 9556-9556/com.nachikamod.pran E/InputEventReceiver: Exception dispatching input event.
2019-04-25 20:59:29.239 9556-9556/com.nachikamod.pran E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nachikamod.pran, PID: 9556
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.nachikamod.pran.Contacts
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(com.google.firebase:firebase-database@@16.0.5:423)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@16.0.5:214)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@16.0.5:79)
at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@16.0.5:212)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:29)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:15)
at com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot(BaseCachingSnapshotParser.java:35)
at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:106)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:122)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1331)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1075)
at android.support.v7.widget.RecyclerView.scrollStep(RecyclerView.java:1832)
at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1927)
at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:3187)
at android.view.View.dispatchTouchEvent(View.java:12513)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3024)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2705)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
at android.app.Activity.dispatchTouchEvent(Activity.java:3400)
2019-04-25 20:59:29.243 9556-9556/com.nachikamod.pran E/AndroidRuntime: at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
at android.view.View.dispatchPointerEvent(View.java:12752)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7092)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7061)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7022)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7195)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:177)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:7166)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7218)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:690)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
在他的回收站查看代码上方。
下面两个是我的回收者视图文件。
package com.nachikamod.pran;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class addTeamMemberToATMD extends AppCompatActivity {
public static String nameDiary;
private Toolbar mToolbar;
private RecyclerView FindTeamRecyclerList;
private DatabaseReference UsersRef;
public void setDiary(String string) {
nameDiary = string;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_team_member_to_atmd);
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
FindTeamRecyclerList = (RecyclerView) findViewById(R.id.find_team_recycler_list);
FindTeamRecyclerList.setLayoutManager(new LinearLayoutManager(this));
mToolbar = (Toolbar) findViewById(R.id.add_team_layout);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(nameDiary + " - Add Team Members");
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<Contacts> options =
new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(UsersRef, Contacts.class)
.build();
FirebaseRecyclerAdapter<Contacts, AddTeamMembersViewHolder> adapter =
new FirebaseRecyclerAdapter<Contacts, AddTeamMembersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull AddTeamMembersViewHolder holder, int position, @NonNull Contacts model) {
holder.userName.setText(model.getName());
holder.userPost.setText(model.getPost());
}
@NonNull
@Override
public AddTeamMembersViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup, false);
AddTeamMembersViewHolder viewHolder = new AddTeamMembersViewHolder(view);
return viewHolder;
}
};
FindTeamRecyclerList.setAdapter(adapter);
adapter.startListening();
}
public static class AddTeamMembersViewHolder extends RecyclerView.ViewHolder {
TextView userName, userPost;
public AddTeamMembersViewHolder(@NonNull View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_profile_name);
userPost = itemView.findViewById(R.id.user_post);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:orientation="horizontal">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/users_profile_image"
android:layout_width="85dp"
android:layout_height="85dp"
android:src="@drawable/profile_image"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="20dp"
android:layout_marginLeft="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/user_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="User Name"
android:textAlignment="textStart"
android:textSize="18sp"
android:textStyle="bold"
android:gravity="start" />
</LinearLayout>
<TextView
android:id="@+id/user_post"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Post"
android:textAlignment="textStart"
android:textSize="18sp"
android:textStyle="bold"
android:gravity="start" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
这是从Firebase检索信息的模块类...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".addTeamMemberToATMD">
<include
android:id="@+id/add_atmd_toolbar"
layout="@layout/add_bar_layout">
</include>
<android.support.v7.widget.RecyclerView
android:id="@+id/add_team"
android:layout_below="@+id/add_atmd_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
答案 0 :(得分:0)
问题是您的Contacts
类包含两个字段(name
和post
),而在数据库中,您还有两个字段,String和uid
字段类型为Access
的字段Object
。除此之外,您的字段被声明为public
而不是private
。为了解决这个问题,请像这样更改您的Contacts
类:
public class Contacts {
private String name, post, uid;
private Access access;
public Contacts() {}
public Contacts(String name, String post, String uid, Access access) {
this.name = name;
this.post = post;
this.uid = uid;
this.access = access;
}
public String getName() { return name; }
public String getPost() { return post; }
public String getUid() { return uid; }
@PropertyName("Access")
public Access getAccess() { return access; }
}
这是您的Access
类:
class Access {
private String nanded, pimpalgaon;
public Access(){}
public Access(String nanded, String pimpalgaon) {
this.nanded = nanded;
this.pimpalgaon = pimpalgaon;
}
@PropertyName("Nanded")
public String getNanded() { return nanded; }
@PropertyName("Pimpalgaon")
public String getPimpalgaon() { return pimpalgaon; }
}
但是请注意,Access
中的字段名称在任何地方都应该相同。我在第一个示例中选择了它们,但是您应该按照自己的方式命名这些文件。
结论是,如果未将“访问”下的所有字段都设为相同,则您的应用将无法工作:
Firebase-root
|
--- Users
|
--- uid
| |
| --- Access
| | |
| | --- nanded: "nanded" //See the name of the field
| | |
| | --- pimpalgaon: "pimpalgaon" //See the name of the field
| |
| --- //The other fields
|
--- uid
|
--- Access
| |
| --- nanded: "nanded" //See the name of the field
| |
| --- pimpalgaon: "pimpalgaon" //See the name of the field
|
--- //The other fields
因此删除该数据并使用新类添加新数据。