Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NumberFormatException:对于输入字符串:“;2019-11-27”;_Java_Android_Json_Date_Date Parsing - Fatal编程技术网

java.lang.NumberFormatException:对于输入字符串:“;2019-11-27”;

java.lang.NumberFormatException:对于输入字符串:“;2019-11-27”;,java,android,json,date,date-parsing,Java,Android,Json,Date,Date Parsing,在我的应用程序中,我从API服务器获取的日期为String值,我想将其解析为int,但出现以下错误: 原因:java.lang.NumberFormatException:对于输入字符串:“2019-11-27” 位于java.lang.Integer.parseInt(Integer.java:521) 位于java.lang.Integer.parseInt(Integer.java:556) 我正在尝试解析为int。我想把它传递给BarEntry类构造函数,它只接受int值或float

在我的应用程序中,我从API服务器获取的日期为String值,我想将其解析为int,但出现以下错误:

原因:java.lang.NumberFormatException:对于输入字符串:“2019-11-27”
位于java.lang.Integer.parseInt(Integer.java:521)
位于java.lang.Integer.parseInt(Integer.java:556)
我正在尝试解析为
int
。我想把它传递给
BarEntry
类构造函数,它只接受int值或float new BarEntry(int或float值,float)。我需要它来显示图表

我的活动

试试看{
Response=client.newCall(request.execute();
Log.d(“Response”,Response.toString());
JSONObject对象=新的JSONObject(Objects.requireNonNull(response.body()).string());
JSONObject rates=object.getJSONObject(“rates”);
迭代器Iterator=rates.keys();
while(iterator.hasNext()){
String keyDate=iterator.next();//我要解析为int值的日期
字符串cad=rates.getJSONObject(keyDate.getString(“cad”);
@SuppressLint(“DefaultLocale”)字符串值=String.format(“%.4s”,cad);
float value1=float.parseFloat(值);
int date=Integer.parseInt(keyDate);
Log.d(“标记”,日期+”);
//Log.d(“标记”,值1+”);
//添加(新的BarEntry(keyDate,value1));
}
}捕获(IOException | JSONException e){
e、 printStackTrace();
Log.d(“ChartActivity”,例如toString());
}
LocalDate和ThreeTenABP 此代码段输出:

18227

文件说明:

纪元日计数是一个简单的日递增计数,其中日为0 is 1970-01-01(ISO)

所以我的建议是,这个数字可以输入到您的
BarEntry
构造函数中

toEpochDay()
返回一个
long
。如果构造函数不接受
long
,请转换为
int
。在上面的代码中,我做了一个简单的转换。风险在于,如果在遥远的将来或遥远的过去发生
int
溢出,我们将得到一个非常错误的结果。我更喜欢进行范围检查,以避免:

    long epochDayLong = date.toEpochDay();
    if (epochDayLong < Integer.MIN_VALUE || epochDayLong > Integer.MAX_VALUE) {
        throw new IllegalStateException("Date " + date + " is out of range");
    }
    int epochDay = (int) epochDayLong;
2019-11-27

如果您需要以相反的方式转换,只要您知道如何:

    LocalDate convertedBack = LocalDate.ofEpochDay(epochDay);
结果是具有相同值的
LocalDate

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

很明显,你的字符串是
“2019-11-27”
,它不能解析为int。你想用它做什么?@khelwood,因为我想把它传递给BarEntry类构造函数,它只接受int值或float新的BarEntry(int或float值,float);我需要它来显示图表我建议
Math.toIntExact(LocalDate.parse(“2019-11-27”).toEpochDay())
。这个例子产生了18227,一个
int
,你可以轻松地将它传递给
BarEntry
构造函数。哦,我不知道这个,抱歉。您可以简单地强制转换:
(int)LocalDate.parse(“2019-11-27”).toEpochDay()
。和/或编码一个范围在施法前检查自己。您也可以将其转换为
float
,这样就不需要进行范围检查。您获得的是纪元日,您不会将日期传递给构造函数,因为如果我的内存正常,则需要几毫秒的时间。谢谢您的帮助,我接受了您的答案,我的帐户中还有一个问题,您能帮我解决吗?我将把链接粘贴到这里:【谢谢,@MohammedQadah。恐怕我不能帮你做另一个。无论如何,我会在有时间的时候仔细看看。好的,非常感谢你,我会等的
    System.out.println(date);
    LocalDate convertedBack = LocalDate.ofEpochDay(epochDay);