【问题标题】:RecyclerView is not previewingRecyclerView 没有预览
【发布时间】:2018-09-06 19:21:38
【问题描述】:

我正在尝试制作一个新闻应用程序、Firebase 数据库和 Recyclerview 来向用户显示网站的新闻源,并使用webview 来查看该网站。我已经在我的数据库中添加了所有细节,但我的问题是它没有显示在我的home 活动中。

这是home 类:

public class home extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {

RecyclerView.LayoutManager layoutManager;
private RecyclerView mPeopleRV;
SpotsDialog dialog;
DatabaseReference mDatabase;
SwipeRefreshLayout swipeLayout;
private FirebaseRecyclerAdapter<News, home.NewsViewHolder> mPeopleRVAdapter;


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

     mDatabase = FirebaseDatabase.getInstance().getReference().child("News");
    mDatabase.keepSynced(true);
    mPeopleRV = (RecyclerView) findViewById(R.id.news_home);

    DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("News");
    Query personsQuery = personsRef.orderByKey();

    mPeopleRV.hasFixedSize();
    mPeopleRV.setLayoutManager(new LinearLayoutManager(this));


    FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();

    mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, home.NewsViewHolder>(personsOptions) {
        @Override
        protected void onBindViewHolder(home.NewsViewHolder holder, final int position, final News model) {

            holder.setNewsimage(getBaseContext(), model.getNewsimage());
            holder.setTitle(model.getTitle());
            holder.setNewssource(model.getNewssource());
            holder.setDescription(model.getDescription());


            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final String url = model.getUrl();
                    Intent intent = new Intent(getApplicationContext(), newswebview.class);
                    intent.putExtra("id", url);
                    startActivity(intent);
                }
            });
        }


        @Override
        public home.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.news, parent, false);

            return new home.NewsViewHolder(view);
        }
    };

    mPeopleRV.setAdapter(mPeopleRVAdapter);

}

@Override
public void onStart() {
    super.onStart();
    mPeopleRVAdapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    mPeopleRVAdapter.stopListening();


}

public static class NewsViewHolder extends RecyclerView.ViewHolder{
    View mView;
   public   NewsViewHolder(View itemView){
        super(itemView);
        mView = itemView;
    }

    public void setNewsimage(Context ctx, String image){
        ImageView post_image =  mView.findViewById(R.id.newsimage);
        Picasso.with(ctx).load(image).into(post_image);
    }

    public void setTitle(String title){
        TextView post_title = mView.findViewById(R.id.newsTitle);
        post_title.setText(title);
    }

    public void setNewssource(String source){
        TextView post_desc = mView.findViewById(R.id.newsSource);
        post_desc.setText(source);
    }

    public void setDescription(String desc){
        TextView post_desc = mView.findViewById(R.id.newsDesc);
        post_desc.setText(desc);
    }
}

这是xml 文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/swipeRefresh"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".home">



        <ImageView
            android:id="@+id/home_menu"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_marginEnd="10dp"
            android:layout_marginTop="10dp"
            android:baselineAligned="false"
            android:onClick="showPopup"
            android:src="@drawable/ic_more_vert_black_24dp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/news_home"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:layout_marginTop="5dp"
            android:padding="10dp" />

</LinearLayout>

@alexmamo 这是新的错误

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: app.ayodkay.com.ajudeme, PID: 27305
              com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type app.ayodkay.com.ajudeme.classes.News
                  at com.google.firebase.database.obfuscated.zzbw.zzb(com.google.firebase:firebase-database@@16.0.2:2423)
                  at com.google.firebase.database.obfuscated.zzbw.zza(com.google.firebase:firebase-database@@16.0.2:79)
                  at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@16.0.2:214)
                  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:6673)
                  at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
                  at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
                  at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
                  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
                  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
                  at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
                  at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
                  at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
                  at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
                  at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
                  at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
                  at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:16000)
                  at android.view.ViewGroup.layout(ViewGroup.java:5228)
                at android.view.ViewRootImpl.perf

【问题讨论】:

标签: android firebase android-layout firebase-realtime-database android-recyclerview


【解决方案1】:

问题是你错过了一个孩子。为了解决这个问题,您应该在向数据库添加数据时使用push() 方法,如下所示:

mDatabase = FirebaseDatabase.getInstance().getReference().child("News").push();
mDatabase.setValue(/* yourObject */);

那么你下面的查询就可以了:

DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("News");
Query personsQuery = personsRef.orderByKey();

【讨论】:

  • 现在我有一个新的错误,我已经更新了问题,所以你可以看到新的错误。
  • 你得到另一个错误的事实,这意味着最初的错误消失了,这是个好消息:)但这听起来是一个新问题,基本上应该被认为是另一个我无法回答的问题评论或仅使用上面的数据。作为个人猜测,我认为您使用了错误的数据库引用,但为了遵守本社区的规则,请使用MCVE 发布另一个新问题,以便我和其他用户可以帮助您。
猜你喜欢
  • 2014-10-30
  • 1970-01-01
  • 2015-07-07
  • 2021-01-13
  • 2016-06-11
  • 2016-12-12
  • 2019-08-25
  • 2021-09-15
  • 2022-11-11
相关资源
最近更新 更多