在回收站视图中的运行时遇到一些问题

时间:2019-04-25 13:45:38

标签: android firebase firebase-realtime-database android-recyclerview recycler-adapter

所以我试图使用一些文档在应用程序中实现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>

Diary Database

Users Database

1 个答案:

答案 0 :(得分:0)

问题是您的Contacts类包含两个字段(namepost),而在数据库中,您还有两个字段,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

因此删除该数据并使用新类添加新数据。