[Android-如果物品不多,应用程序将崩溃

问题描述 投票:0回答:1

我正在使用回收站适配器在帖子上显示评论。代码设置为在单击编辑文本时,以及当前用户发布新评论时,将回收者视图滚动到底部。

如果显示了键盘,并且回收者视图仍未触摸键盘(显示了2到4条评论),则该评论在发布时会崩溃。如果有很多项目(足够放在键盘下面),则recyclerview滚动并没有崩溃。

这是我的代码:

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // some code
            scrollToBottom = true; // this is initially false
            loadComments();

        }
    });

    private void loadComments () {

        Query query = firebaseFirestore.collection...;

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

        adapter = new Adapter(options, this);

        recyclerview.setHasFixedSize(true);
        recyclerview.setLayoutManager(new LinearLayoutManager(this));
        recyclerview.setAdapter(adapter);

        if (scrollToBottom) {
            scrollToBottom = false;
            scrollToTheBottom();
        }

    }

    private void scrollToTheBottom() {

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                recyclerview.smoothScrollToPosition(adapter.getItemCount());
            }
        }, 600);

    }

适配器代码:

public class Adapter extends FirestoreRecyclerAdapter<Model, Adapter.ViewHolder> {

Context context;
TimeAgo timeAgo;

public Adapter(@NonNull FirestoreRecyclerOptions<Model> options, Context context) {
    super(options);
    this.context = context;
}

@Override
protected void onBindViewHolder(@NonNull final ViewHolder holder, int position, @NonNull Model model) {

    final String userID = model.getUser_id();
    String image = model.getImage();
    String username = model.getUsername();
    String comment = model.getComment();
    Timestamp commentTimeAgo = model.getTimestamp();

    String timestampString = String.valueOf(commentTimeAgo);
    String[] noOpeningParentheses = timestampString.split("\\(");
    String[] noClosingParentheses = noOpeningParentheses[1].split("\\)");
    String[] noCommaAndSpace = noClosingParentheses[0].split(", ");
    String[] secondsFromTimestamp = noCommaAndSpace[0].split("seconds=");
    String[] nanosecondsFromTimestamp = noCommaAndSpace[1].split("nanoseconds=");
    long millis = TimeUnit.SECONDS.toMillis(Long.parseLong(secondsFromTimestamp[1])) + TimeUnit.NANOSECONDS.toMillis(Long.parseLong(nanosecondsFromTimestamp[1]));

    // Applying
    if (image.equals("default")) {
        holder.userImage.setImageResource(R.mipmap.no_image);
    } else {
        Glide.with(context).load(image).into(holder.userImage);
    }
    holder.userUsername.setText(username);
    holder.comment.setText(String.valueOf(comment));
    holder.commentTimeAgo.setText(timeAgo.getTimeAgo(context, millis));

}

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

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);
    context = parent.getContext();
    timeAgo = new TimeAgo();
    return new ViewHolder(view);

}

public class ViewHolder extends RecyclerView.ViewHolder {

    CircleImageView userImage;
    TextView userUsername, comment, commentTimeAgo;

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

        userImage = itemView.findViewById(R.id.userimage);
        userUsername = itemView.findViewById(R.id.userUsername);
        comment = itemView.findViewById(R.id.comment);
        commentTimeAgo = itemView.findViewById(R.id.timeago);

    }

}

}

查看日志猫时,在第三行出现错误:

String timestampString = String.valueOf(timestamp);
String[] noOpeningParentheses = timestampString.split("\\(");
String[] noClosingParentheses = noOpeningParentheses[1].split("\\)"); // error here
String[] noCommaAndSpace = noClosingParentheses[0].split(", ");
String[] secondsFromTimestamp = noCommaAndSpace[0].split("seconds=");
String[] nanosecondsFromTimestamp = noCommaAndSpace[1].split("nanoseconds=");
long millis = TimeUnit.SECONDS.toMillis(Long.parseLong(secondsFromTimestamp[1])) + TimeUnit.NANOSECONDS.toMillis(Long.parseLong(nanosecondsFromTimestamp[1]));

这是我编写的用于将Firebase Firestore时间戳字段转换为毫秒的代码。

我在logcat中得到的类似于java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

我不知道该如何解决。有什么帮助吗?

android android-recyclerview google-cloud-firestore recycler-adapter logcat
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.