gpt4 book ai didi

android - 将 long 转换为 Double 时出现问题

转载 作者:行者123 更新时间:2023-11-29 16:59:19 24 4
gpt4 key购买 nike

我一直在 android 上使用 google firebase 的实时数据库,以便实时绘制数据图表。当我从数据库中检索数据时,它会将其设置为 long 类型。然后我尝试将此数据转换为 double 据,但它不起作用。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.helper.StaticLabelsFormatter;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;

public class MainActivity extends AppCompatActivity {
private DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Set up GraphView
GraphView graph = (GraphView) findViewById(R.id.graph);
final LineGraphSeries<DataPoint> series = new LineGraphSeries<>();
graph.addSeries(series);

//Initialize Database
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("Electric").setValue("value set");
mDatabase.child("Water").addChildEventListener(new ChildEventListener() {

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Double xl = (Double) dataSnapshot.child("time").getValue();
Double yl = (Double) dataSnapshot.child("Value").getValue();

double x = xl.doubleValue();
double y = yl.doubleValue();
new DataPoint(x ,y);

}

@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onCancelled(DatabaseError databaseError) {

}

});



}
}

有这个错误

FATAL EXCEPTION: main                                                                                        
Process: com.example.seniordesign.homemonitoringapp, PID: 3765
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
at com.example.seniordesign.homemonitoringapp.MainActivity$1.onChildAdded(MainActivity.java:35)
at com.google.android.gms.internal.zzbox.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZT(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5731)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)

我正在使用这个图形库 http://www.android-graphview.org/

最佳答案

这里的关键是理解内置类型 longdouble 以及它们的包装对应物 Long 之间的区别双。 Java 类型系统的规则允许您将 long 转换为 double,反之亦然。但是,由于 LongDouble 是对象,因此只能根据用于所有引用的规则转换引用。特别是,您只能在继承层次结构中从子对象强制转换为父对象(这可以隐式发生)或从父对象强制转换为子对象。 LongDouble 都扩展了 Number, sibling 也是如此。

由于 getValue() 返回的对象是 Long,您应该转换为 Long 而不是 Double :

    @Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Long xl = (Long) dataSnapshot.child("time").getValue();
Long yl = (Long) dataSnapshot.child("Value").getValue();

double x = xl.doubleValue();
double y = yl.doubleValue();
new DataPoint(x ,y);

}

作为旁注,如果您要存储“时间”和“值”数据,您可能需要考虑修改保存这些值的代码,以便将它们存储为 Double 以开始和。这样您在此处检索值时就会遇到更少的问题。

关于android - 将 long 转换为 Double 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com