如何使用FirebaseRecyclerAdapter显示Firebase实时数据库中的所有数据

时间:2018-10-19 07:21:02

标签: android firebase firebase-realtime-database firebaseui

我的数据存储在Firebase实时数据库中。我希望所有数据都位于回收者视图中。

我尝试了所有可能的方法来获取数据。 首次使用Firebase数据库。

public class ImageAndDescription extends AppCompatActivity {

private RecyclerView mRecyclerView;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mRef;
private ViewHolder viewHolder;
private Query query;
private FirebaseRecyclerOptions<Model> options;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_and_description);

    //ActionBar
    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("Posts Lists");

    mRecyclerView = findViewById(R.id.recyclerView);
    mRecyclerView.setHasFixedSize(true);

    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

    //send query to firebase
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mRef = mFirebaseDatabase.getReference("Data");
}

@Override
protected void onStart() {
    super.onStart();

    query = FirebaseDatabase.getInstance().getReference().child("Data").limitToLast(50);

    options = new FirebaseRecyclerOptions.Builder<Model>().setQuery(query, Model.class).build();

    FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Model model) {

            viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getDescription(), model.getImage());
        }

        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return null;
        }
    };
    mRecyclerView.setAdapter(firebaseRecyclerAdapter);
}
}

ViewHolder类,该类将设置视图:

public class ViewHolder extends RecyclerView.ViewHolder {

View mView;

public ViewHolder(View itemView) {
    super(itemView);

    mView = itemView;
}

//set details to the recycler view row
public void setDetails(Context ctx, String title, String description, String image) {
    //views
    TextView mTitleView = mView.findViewById(R.id.rTitle);
    TextView mDetail = mView.findViewById(R.id.rDescription);
    ImageView mImage = mView.findViewById(R.id.rImageView);
    //set data to the view
    mTitleView.setText(title);
    mDetail.setText(description);
    Picasso.get().load(image).into(mImage);
}
}

Model类,这是用于设置数据的普通getter和setter类:

public class Model {

String Title, Image, Description;

public Model() {}

public String getTitle() {
    return Title;
}

public void setTitle(String title) {
    Title = title;
}

public String getImage() {
    return Image;
}

public void setImage(String image) {
    Image = image;
}

public String getDescription() {
    return Description;
}

public void setDescription(String description) {
    Description = description;
}
}

错误:

    10-19 12:21:19.816 28465-28465/com.example.jerry.anotherdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jerry.anotherdemo, PID: 28465
java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declaration of 'android.support.v4.content.res.ResourcesCompat' appears in /data/app/com.example.jerry.anotherdemo-2/split_lib_dependencies_apk.apk)
    at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119)
    at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:208)
    at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:110)
    at android.support.v7.widget.AppCompatTextHelperV17.loadFromAttributes(AppCompatTextHelperV17.java:38)
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:81)
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:71)
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:67)
    at android.support.v7.widget.Toolbar.setTitle(Toolbar.java:753)
    at android.support.v7.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:261)
    at android.support.v7.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:243)
    at android.support.v7.widget.ActionBarOverlayLayout.setWindowTitle(ActionBarOverlayLayout.java:621)
    at android.support.v7.app.AppCompatDelegateImplV9.onTitleChanged(AppCompatDelegateImplV9.java:631)
    at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328)
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
    at com.example.jerry.anotherdemo.ImageAndDescription.onCreate(ImageAndDescription.java:31)
    at android.app.Activity.performCreate(Activity.java:6543)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2513)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2626)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1475)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5740)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:766)

0 个答案:

没有答案