Firebase数据上传导致Android应用崩溃

4
我正在收集信号数据并将其上传到数据库。
在尝试实现其他功能之前,我编写了几个测试函数。使用我想要使用的类上传时,它会崩溃,但是使用测试用例时不会出现这种情况。
以下是类方法和初始化的代码:
初始化数据库。
FirebaseDatabase database;
DatabaseReference myRef;

类:

package com.example.mike.maps_example;

/**
 * Created by Mike on 3/10/2017.
 */

public class WcdmaSignalEntry {
    Double Latitude, Longitude;
    String dBm;
    String Cid;
    String Lac;
    String Mcc;
    String Mnc;
    String Psc;
    String Uarfcn;
    String connectionType = "WCDMA";

public WcdmaSignalEntry(){
    // Default constructor required for calls to DataSnapshot.getValue(User.class)

}

public WcdmaSignalEntry(double Latitude, double Longitude, String dBm, String Cid, String Lac, String Mcc, String Mnc, String Psc, String Uarfcn){
    this.Latitude = Latitude;
    this.Longitude = Longitude;
    this.dBm = dBm;
    this.Cid = Cid;
    this.Lac = Lac;
    this.Mcc = Mcc;
    this.Mnc = Mnc;
    this.Psc = Psc;
    this.Uarfcn = Uarfcn;
    }
}

这里是用于测试类的代码:

package com.example.mike.maps_example;

/**
 * Created by Mike on 28/9/2017.
 */

public class CellSignalEntry {
    public double Latitude;
    public double Longitude;
    public String dBm;
    public String CI; //cell identity
    public String LAC; //Location Area Code
    public String PSC; //primary scrambling code
    public String TA; //timing advance
    public String PCI_LTE; //physical cell identifier for LTE
    public String PCI_GSM; //physical cell identifier for GSM

public CellSignalEntry() {
    // Default constructor required for calls to DataSnapshot.getValue(User.class)
}

public CellSignalEntry(String dBm, String CI, String LAC, String PSC, String TA, String PCI_LTE, String PCI_GSM, double Latitude, double Longitude) {
    this.dBm = dBm;
    this.CI = CI;
    this.LAC = LAC;
    this.PSC = PSC;
    this.TA = TA;
    this.PCI_GSM = PCI_GSM;
    this.PCI_LTE = PCI_LTE;
    this.Latitude = Latitude;
    this.Longitude = Longitude;
    }
}

我有两种方法。

private void writeNewWcdmaEntry(double lon, double lat,  String dBm, String Cid, String Lac,  String Mcc, String Mnc,String Psc, String Uarfcn, long entry){
    WcdmaSignalEntry newEntry = new WcdmaSignalEntry(lon, lat, dBm, Cid, Lac, Mcc, Mnc, Psc, Uarfcn);
    tvView.setText(newEntry.dBm);
    tvView.setText(newEntry.Cid);
    //myRef.child("Entry").child(Long.toString(entry)).setValue(newEntry);
}

并且
private void writeNewUser(long userId, String dBm, String CI, String LAC, String PSC, String TA, String PCI_LTE, String PCI_GSM, double currentLat, double currentLon) {
    CellSignalEntry user = new CellSignalEntry(dBm, CI, LAC, PSC, TA, PCI_LTE, PCI_GSM, currentLat, currentLon);

    myRef.child("Entry").child(Long.toString(userId)).setValue(user);
}

当我运行第二个方法时,我的应用程序运行良好,但是当我运行第一个方法时,如果取消注释此行,则在将数据上传到 Firebase 数据库时会崩溃:

//myRef.child("Entry").child(Long.toString(entry)).setValue(newEntry);

我完全被卡住了。非常感谢任何帮助。
编辑:在发布这篇文章之后,我解决了问题。我不知道为什么,但将WcdmaSignalEntry类中的所有变量设置为“public”可以解决问题,但是我不确定为什么,因为我对java非常陌生,如果您能够解释一下就好了 :)!

这两个方法在同一个包中吗? - Niraj Niroula
1个回答

1

Java 文档 表示:

如果类没有修饰符(默认情况下,也称为包访问权限),则仅在其自己的包中可见。

如果这两个方法(来自您的问题)不在类 WcdmaSignalEntry 所在的同一包内,即在 com.example.mike.maps_example 内部,则您无法访问这些变量,除非它们是公共的。

有关 Java 中访问修饰符的更多信息,请参阅此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接