【问题标题】:DatabaseException: Class is missing a constructor with no arguments [duplicate]DatabaseException:类缺少没有参数的构造函数[重复]
【发布时间】:2017-04-15 17:50:58
【问题描述】:

我正在尝试从我的 firebase 数据库中检索数据并将其显示在 ListView 的 TextViews 中。但是,我在这一行遇到“缺少构造函数”异常:Clients clients = clientsSnapshot.getValue(Clients.class);

以下是完整的例外情况:

不知道如何解决。我在 firebase 或 android 开发方面都不是很有经验,所以任何帮助都将不胜感激。 伙计们干杯!

public class ViewProfile extends AppCompatActivity{

    ListView listviewClients;
    List<Clients> clientsList;

    DatabaseReference databaseClients;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_profile);

        listviewClients = (ListView) findViewById(R.id.listviewClients);
        databaseClients = FirebaseDatabase.getInstance().getReference("clients");

        clientsList = new ArrayList<>();
    }

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

        databaseClients.addValueEventListener (new ValueEventListener() {


            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                clientsList.clear();

                for (com.google.firebase.database.DataSnapshot clientsSnapshot : dataSnapshot.getChildren()) {
                    Clients clients = clientsSnapshot.getValue(Clients.class);

                    clientsList.add(clients);
                }
                ClientsList adapter = new ClientsList(ViewProfile.this, clientsList);
                listviewClients.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

        });
    }
}

Clients.java:

public class Clients {

    String clientName;
    String clientCareer;
    Boolean techCB;
    Boolean mediCB;
    Boolean renewableEnergyNF;
    Boolean googleNF;
    Boolean novartisNF;
    Boolean teslaNF;
    Boolean fbLRS;
    Boolean applLRS;
    Boolean yhooLRS;
    Boolean eurusdCB;
    Boolean usdrubCU;
    Boolean silverCO;
    Boolean goldCO;
    Boolean gbpusdCU;
    Boolean nsdqI;
    Boolean sp500I;


//    public Clients(String id, String name, String career, Boolean techCB, Boolean mediCB, Boolean renewableEnergyNF, Boolean googleNF, Boolean novartisNF, Boolean teslaNF, Boolean fbLRS, Boolean applLRS, Boolean yhooLRS, Boolean eurusdCB, Boolean usdrubCU, Boolean silverCO, Boolean goldCO, Boolean gbpusdCU, Boolean nsdqI, Boolean sp500I) {
//
//    }

    public Clients(String id, String clientCareer, String clientName, Boolean techCB, Boolean mediCB, Boolean renewableEnergyNF,
                   Boolean googleNF, Boolean novartisNF, Boolean teslaNF, Boolean fbLRS, Boolean applLRS, Boolean yhooLRS, Boolean eurusdCB,
                   Boolean usdrubCU, Boolean silverCO, Boolean goldCO, Boolean gbpusdCU, Boolean nsdqI, Boolean sp500I) {

        this.clientName = clientName;
        this.clientCareer = clientCareer;
        this.techCB = techCB;
        this.mediCB = mediCB;
        this.renewableEnergyNF = renewableEnergyNF;
        this.googleNF = googleNF;
        this.novartisNF = novartisNF;
        this.teslaNF = teslaNF;
        this.fbLRS = fbLRS;
        this.applLRS = applLRS;
        this.yhooLRS = yhooLRS;
        this.eurusdCB = eurusdCB;
        this.usdrubCU = usdrubCU;
        this.silverCO = silverCO;
        this.goldCO = goldCO;
        this.gbpusdCU = gbpusdCU;
        this.nsdqI = nsdqI;
        this.sp500I = sp500I;
    }

    public String getClientName() {
        return clientName;
    }

    public String getClientCareer() {
        return clientCareer;
    }

    public Boolean getTechCB() {
        return techCB;
    }

    public Boolean getMediCB() {
        return mediCB;
    }

    public Boolean getRenewableEnergyNF() {
        return renewableEnergyNF;
    }

    public Boolean getGoogleNF() {
        return googleNF;
    }

    public Boolean getNovartisNF() {
        return novartisNF;
    }

    public Boolean getTeslaNF() {
        return teslaNF;
    }

    public Boolean getFbLRS() {
        return fbLRS;
    }

    public Boolean getApplLRS() {
        return applLRS;
    }

    public Boolean getYhooLRS() {
        return yhooLRS;
    }

    public Boolean getEurusdCB() {
        return eurusdCB;
    }

    public Boolean getUsdrubCU() {
        return usdrubCU;
    }

    public Boolean getSilverCO() {
        return silverCO;
    }

    public Boolean getGoldCO() {
        return goldCO;
    }

    public Boolean getGbpusdCU() {
        return gbpusdCU;
    }

    public Boolean getNsdqI() {
        return nsdqI;
    }

    public Boolean getSp500I() {
        return sp500I;
    }

【问题讨论】:

  • Clients 类没有无参数构造函数
  • 错误信息的哪一部分需要帮助?你知道什么是构造函数吗?你知道什么是论据吗?理解术语后,您应该能够弄清楚如何修复错误。
  • 发布Clients类代码..
  • @Code-Apprentice 我不知道构造函数的定义,但它通常是公共的_____ (){}?我对参数的了解是它们就像参数。如果您能在任何知识上帮助我,我会很高兴:D
  • @rafsanahmad007 已发布。干杯!

标签: android exception firebase firebase-realtime-database


【解决方案1】:

在您的模型类中添加:无参数constructor

public class Clients {
    private String name;  //your variables 
    ...
    ...

    public Clients (){ }  //no argument constructor

【讨论】:

  • 谢谢!这为我修好了。再次感谢。
【解决方案2】:

我对参数的了解是它们就像参数

是的,实参和参数是一回事。

我不知道构造函数的定义,但它通常是公共的_____ (){}?

是的,这是正确的。错误消息告诉您 Clients 类没有没有任何参数的构造函数。如果您创建一个没有构造函数的类,则会自动生成无参数构造函数。您收到错误是因为您有一个带有参数的 Clients 构造函数。因此,您需要显式提供一个不带任何参数的函数,以便它与 Firebase 一起正常工作。

附言您应该使用boolean 而不是Boolean。有关更多详细信息,您应该了解更多关于基本类型和包装对象之间的区别。

【讨论】:

  • 感谢您提供的所有信息。我刚刚尝试让自己沉浸其中,这非常有帮助!干杯,祝你有美好的一天。
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 2018-05-13
  • 2019-11-29
  • 1970-01-01
相关资源
最近更新 更多