gpt4 book ai didi

java - 在 FirebaseRecyclerAdapter 中使用 Picasso 设置 CircleImageView 时应用程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:46 24 4
gpt4 key购买 nike

我正在尝试显示 RecyclerView来自 firebase 的数据。

我不知道为什么会收到此错误:

Process: com.example.lapitchat, PID: 29868
java.lang.IllegalArgumentException: Target must not be null.
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:682)
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:665)
at com.example.lapitchat.UsersActivity$1.onBindViewHolder(UsersActivity.java:65)
at com.example.lapitchat.UsersActivity$1.onBindViewHolder(UsersActivity.java:61)
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.onLayoutChildren(LinearLayoutManager.java:612)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1888)
at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:407)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:693)
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)

那是我的UsersActivity ,我想在那里显示RecyclerView 。我还有ViewHolder在里面。 model.getImage()给出了图片下载Url,不知道为什么不能将图片存储在 holder.singleImage 中.

public class UsersActivity extends AppCompatActivity {

private Toolbar mToolbar;

private RecyclerView mUsersList;
private DatabaseReference mUsersDatabase;
private FirebaseRecyclerOptions<Users> options;
private FirebaseRecyclerAdapter<Users, UsersViewHolder> adapter;

private static final String TAG = "UsersActivity";

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

mToolbar = findViewById(R.id.users_appBar);
setSupportActionBar(mToolbar);

getSupportActionBar().setTitle("All Users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

mUsersList = findViewById(R.id.users_list);
mUsersList.setHasFixedSize(true);
mUsersList.setLayoutManager(new LinearLayoutManager(this));

options = new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(mUsersDatabase, Users.class).build();

adapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users model) {

Picasso.get().load(model.getImage()).into(holder.singleImage);
holder.singleName.setText(model.getName());
holder.singleStatus.setText(model.getStatus());
}

@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

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

return new UsersViewHolder(view);
}
};
}

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

adapter.startListening();
mUsersList.setAdapter(adapter);
}

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

adapter.stopListening();
mUsersList.setAdapter(adapter);
}

public class UsersViewHolder extends RecyclerView.ViewHolder {
TextView singleName;
TextView singleStatus;
CircleImageView singleImage;

UsersViewHolder(@NonNull View itemView) {
super(itemView);

singleName = findViewById(R.id.user_single_name);
singleStatus = findViewById(R.id.user_single_status);
singleImage = findViewById(R.id.user_single_image);
}
}
}

这是我的Users.java代码:

package com.example.lapitchat;

public class Users {

public String image;
public String name;
public String status;

public Users() {
//needed
}

public Users(String name, String image, String status) {
this.image = image;
this.name = name;
this.status = status;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getImage() {
return image;
}

public void setImage(String image) {
this.image = image;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}
}

其他可能有用的文件:

Activity 的布局是 activity_users.xml :

<android.support.constraint.ConstraintLayout 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=".UsersActivity">

<include
android:id="@+id/users_appBar"
layout="@layout/app_bar_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<android.support.v7.widget.RecyclerView
android:id="@+id/users_list"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/users_appBar">

</android.support.v7.widget.RecyclerView>

</android.support.constraint.ConstraintLayout>

以及列表项布局users_single_layout.xml如下。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="wrap_content">

<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/user_single_image"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginStart="15dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:src="@drawable/avatar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/avatar" />

<TextView
android:id="@+id/user_single_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="20dp"
android:text="TextView"
android:textColor="@android:color/background_dark"
android:textSize="18sp"
app:layout_constraintStart_toEndOf="@+id/user_single_image"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/user_single_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginTop="10dp"
android:text="TextView"
app:layout_constraintStart_toEndOf="@+id/user_single_image"
app:layout_constraintTop_toBottomOf="@+id/user_single_name" />

</android.support.constraint.ConstraintLayout>

另外,我的数据库看起来如何:

最佳答案

有些事情我还是不太清楚。但是,我认为这不是您 Firebase 数据库中的完整数据。我想您正在获得大量用户。因此,您对 firebase 适配器的初始化需要进行如下修改。

options = new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(mUsersDatabase, Users[].class).build(); // Use the array

您的Users类需要有另一个我认为也缺少的属性。

public class Users {
public String image;
public String name;
public String status;
public String thumb_image; // This is missing
}

其他的我觉得还不错。让我知道这是否能解决您的问题。

关于java - 在 FirebaseRecyclerAdapter 中使用 Picasso 设置 CircleImageView 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com