首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我会得到java.lang.NumberFormatException: For输入字符串?

为什么我会得到java.lang.NumberFormatException: For输入字符串?
EN

Stack Overflow用户
提问于 2022-08-10 13:40:29
回答 1查看 263关注 0票数 0

我正在使用MPAndroidCharts制作一个线条图,它使用API来接收和显示数据。(这是我所遵循的指南:https://learntodroid.com/how-to-display-a-line-chart-in-your-android-app/)。我已经完成了教程中显示的所有事情,但是我似乎一直在犯同样的错误。这是我的方法,我调用API并尝试从其中检索数据。错误出现在响应体中的x值上。

代码语言:javascript
运行
复制
private void AddCurrentDataValues() {

       saunaDataAPI.getHistoricalData(
               "Sauna1"
       ).enqueue(new Callback<List<SaunaBitResponse.SaunaBit>>() {
           @Override
           public void onResponse(@NonNull Call<List<SaunaBitResponse.SaunaBit>> call, @NonNull Response<List<SaunaBitResponse.SaunaBit>> response) {
               ArrayList<Entry> co2Data = new ArrayList<>();

               if (response.body() != null) {

                   for (int i = 0; i < response.body().size(); i++) {
                       float x = response.body().get(i).time;
                       float y = response.body().get(i).co2;

                       if (y != 0) {
                           co2Data.add(new Entry(x, y));
                       }
                   }
                   Comparator<Entry> comparator = new Comparator<Entry>() {
                       @Override
                       public int compare(Entry o1, Entry o2) {
                           return Float.compare(o1.getX(), o2.getX());
                       }
                   };
                   co2Data.sort(comparator);

                   setLineChartData(co2Data);
               }
           }
           @Override
           public void onFailure(@NonNull Call<List<SaunaBitResponse.SaunaBit>> call, @NonNull Throwable t) {

               t.printStackTrace();
           }
       });
   }

这是我从API中检索数据的接口:

代码语言:javascript
运行
复制
public interface SaunaDataAPI {
    @Headers({"Accept: application/json"})

    @GET("getMeasurementBySaunaName/{name}")
    Call<List<SaunaBitResponse.SaunaBit>> getHistoricalData (
            @Path("name") String sauna_name
    );

    @GET("getMeasurementById/{id}")
    Call<SaunaBitResponse.SaunaBit> getDataById(
            @Path("id") long id
    );
}

这是处理响应的类。

代码语言:javascript
运行
复制
public class SaunaBitResponse {

    public List<SaunaBit> saunaBits;

    public static class SaunaBit {
        public String sauna_name;
        public long time;
        public float temp;
        public float co2;
        public float humidity;
    }
}

这是API中的度量实体:

代码语言:javascript
运行
复制
@Entity
@Table(name = "Measurement")
public class Measurements {

    @Id
    @Column(name = "measurementId")
    private int id;
    private String saunaName;
    private int Co2;
    private int humidity;
    private int temperature;
    private Time time;
    @ManyToOne(cascade =CascadeType.ALL)
    private SaunaRoom saunaRoom;


    public Measurements() {
    }

    public Measurements(int id, String saunaName, int co2, int humidity, int temperature, Time time,SaunaRoom saunaRoom) {
        this.id = id;
        this.saunaName = saunaName;
        Co2 = co2;
        this.humidity = humidity;
        this.temperature = temperature;
        this.time = time;
        this.saunaRoom= saunaRoom;
    }
    public SaunaRoom getSaunaRoom() {
        return saunaRoom;
    }

    public void setSaunaRoom(SaunaRoom saunaRoom) {
        this.saunaRoom = saunaRoom;
    }



    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getSaunaName() {
        return saunaName;
    }

    public void setSaunaName(String saunaName) {
        this.saunaName = saunaName;
    }

    public int getCo2() {
        return Co2;
    }

    public void setCo2(int co2) {
        Co2 = co2;
    }

    public int getHumidity() {
        return humidity;
    }

    public void setHumidity(int humidity) {
        this.humidity = humidity;
    }

    public int getTemperature() {
        return temperature;
    }

    public void setTemperature(int temperature) {
        this.temperature = temperature;
    }

    public Time getTime() {
        return time;
    }

    public void setTime(Time time) {
        this.time = time;
    }

}

最后,这是我用来检索数据的API中的get方法:

代码语言:javascript
运行
复制
  @GetMapping({"/getMeasurementBySaunaName/{name}"})
    private List<Measurements> getMeasurementsBySaunaName(@PathVariable String name){
        return measurementService.getMeasurementsBySaunaName(name);

    }

StackTrace:

代码语言:javascript
运行
复制
W/System.err: com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "20:36:00"
W/System.err:     at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:306)
W/System.err:     at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:296)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
W/System.err:     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
W/System.err:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
W/System.err:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
W/System.err:     at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
W/System.err:     at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
W/System.err:     at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err:     at java.lang.Thread.run(Thread.java:920)
W/System.err: Caused by: java.lang.NumberFormatException: For input string: "20:36:00"
W/System.err:     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
W/System.err:     at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
W/System.err:     at java.lang.Double.parseDouble(Double.java:538)
W/System.err:     at com.google.gson.stream.JsonReader.nextLong(JsonReader.java:964)
W/System.err:     at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:304)
W/System.err:   ... 14 more

有人知道哪里出了问题吗?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-08-11 09:40:34

所以我终于弄清楚问题出在哪里了。当时我收到了一个字符串值,需要将它解析为可以映射的东西。因此,我将接收到的时间的字符串值转换为:

代码语言:javascript
运行
复制
if (response.body() != null) {
                    for (int i = 0; i < response.body().size(); i++) {
                        String responseTime = response.body().get(i).time.substring(0,5);

                        float x = Float.parseFloat(responseTime.replace(":","."));
                        float y = response.body().get(i).temp;

                        if (y != 0) {
                            tempData.add(new Entry(x, y));
                        }
                        System.out.println("ITS GOING THROUGH THE THING");
                    }

感谢所有帮助我的人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73307373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档