Android -如果没有太多项目,应用程序就会崩溃

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

如果显示了键盘,但回收器视图仍然没有接触到键盘(显示了2到4条评论),那么当评论发布时,应用程序就会崩溃。如果有很多项目(足够放在键盘下面),回收视图会滚动,没有任何东西会崩溃。

这是我的代码:

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);

    }

}

}

当查看logcat时,我在第三行得到一个错误:

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

我不知道如何解决这个问题。有什么需要帮忙的吗?

转载请注明出处:http://www.intsu.net/article/20230508/2272389.html