【问题标题】:No suitable constructor found for ChatMessage(String,String)没有为 ChatMessage(String,String) 找到合适的构造函数
【发布时间】:2017-08-27 12:32:17
【问题描述】:
Error:(88, 79) error: no suitable constructor found for ChatMessage(String,String)
    constructor ChatMessage.ChatMessage(String,String,long) is not applicable
    (actual and formal argument lists differ in length)
    constructor ChatMessage.ChatMessage() is not applicable
    (actual and formal argument lists differ in length)

这是我的相关错误代码:

FirebaseDatabase.getInstance().getReference().push().setValue(new ChatMessage(input.getText().toString(), FirebaseAuth.getInstance().getCurrentUser().getEmail()));

与错误相关的 ChatMessage 构造函数:

public ChatMessage(String messageText, String messageUser, long messageTime) {
        this.messageText = messageText;
        this.messageUser = messageUser;

        messageTime = new Date().getTime();
    }

我关注了一个 YouTube 教程 https://www.youtube.com/watch?v=Xn0tQHpMDnM 并且许多 cmets 提到了同样的错误,但没有人收到回复。

【问题讨论】:

  • 你忘记了最后一个参数 (long messageTime) 添加它,调用将起作用
  • 如果您自己阅读错误消息,您会发现有一切可以解决您的问题
  • 从构造函数参数中删除长消息时间。你没有使用它。
  • @RamKumar 我猜他没有能力改变构造函数,例如一个外部库
  • @Lino 无需猜测。观看视频

标签: java android firebase constructor


【解决方案1】:

您已经使用三个参数定义了ChatMessage 类的构造函数:

ChatMessage(String messageText, String messageUser, long messageTime)

要创建ChatMessage 类的新对象,您不仅需要传递我在代码中看到的两个参数,还需要传递三个参数。所以为了解决你的问题,请使用下面这行代码:

FirebaseDatabase.getInstance().getReference()
     .push()
     .setValue(new ChatMessage(
          input.getText().toString(),
          FirebaseAuth.getInstance().getCurrentUser().getEmail(),
          null));

如您所见,我已将 null 添加为最后一个参数,因为您正在 ChatMessage 类中创建 Date 的新实例。

【讨论】:

  • 没有。第三个参数应该从构造函数中删除。默认时间为new Date().getTime()
【解决方案2】:

您没有正确关注视频,或者您没有费心查看see the source code 的说明。

去掉第三个参数。

public class ChatMessage {
    private String messageText;
    private String messageUser;
    private long messageTime;

    public ChatMessage(String messageText, String messageUser) {
        this.messageText = messageText;
        this.messageUser = messageUser;


        messageTime = new Date().getTime();

默认消息时间为“现在”,以纪元以来的秒数为单位

许多 cmets 都提到了同样的错误

我看到提到的不同错误与错误使用 getValue(ChatMessage.value) 有关,而不是您遇到的错误

如果您想拥有 3 个参数,则除了之前的参数之外,您还需要这个

public ChatMessage(String messageText, String messageUser, long messageTime) {
    this.messageText = messageText;
    this.messageUser = messageUser;

    this.messageTime = messageTime
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2015-09-07
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多