我在 Android Studio 中实现 Amadeus API 时遇到问题。这是我的第一个 Android 应用程序,所以这是我第一次使用 AsyncTask 等。
这是我的崩溃报告:
正如你所看到的,这条单一的崩溃线很突出:
引起:java.lang.NumberFormatException:对于输入字符串:“2017-07-06”
从日志中:api 正在完成它的工作,但由于输入字符串异常,最终以某种方式崩溃。
noman.places.example 我/标签:{
"origin" : "FRA", "currency" : "EUR", "results" : [ { "destination" : "LON", "departure_date" : "2017-07-06", "return_date" : "2017-07-07", "price" : "258.87", "airline" : "BA" } ] } --------- beginning of crash 06-05 00:46:59.142 18633-18652/noman.places.example
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: noman.places.example, PID: 18633 java.lang.RuntimeException: 在 android.os.AsyncTask$3.done(AsyncTask.java:325 执行 doInBackground() 时出错) 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 在 java.util.concurrent.FutureTask.setException(FutureTask.java:223) 在 java.util.concurrent.FutureTask。在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent 运行(FutureTask.java:242)。 java.lang.Thread.run(Thread.java:761) 处的 ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 原因:java.lang.NumberFormatException:对于输入字符串:java 处的“2017-07-06”。朗朗。parseLong(Long.java:443) 在 java.lang.Long.parseLong(Long.java:485) 在 com.google.gson.JsonPrimitive.getAsLong(JsonPrimitive.java:238) 在 io.swagger.client.JsonUtil$1。在 com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58) 在 com.google.gson 的 io.swagger.client.JsonUtil$1.deserialize(JsonUtil.java:35) 反序列化(JsonUtil.java:37)。 internal.bind.ReflectiveTypeAdapterFactory$1。在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196) 处读取 (ReflectiveTypeAdapterFactory.java:103) 在 com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java: 40) com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81) com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60) 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196) 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)。 google.gson.Gson.fromJson(Gson.java:810) at com.google.gson.Gson.fromJson(Gson.java:775) at com.google.gson.Gson.fromJson(Gson.java:724) at io .swagger.client.JsonUtil。deserializeToObject(JsonUtil.java:55) 在 io.swagger.client.ApiInvoker.deserialize(ApiInvoker.java:256) 在 io.swagger.client.api.DefaultApi.flightInspirationSearch(DefaultApi.java:1085) 在 noman.places.example .MapsActivity$AmadeusTask.doInBackground(MapsActivity.java:144) 在 noman.places.example.MapsActivity$AmadeusTask.doInBackground(MapsActivity.java:125) 在 android.os.AsyncTask$2.call(AsyncTask.java:305) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.runWorker(ThreadPoolExecutor.runWorker) 的 java.util.concurrent.FutureTask.run(FutureTask.java:237) java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)237) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)237) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)第1133章)第1133章)
这是我对 API 的实现:
private class AmadeusTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... task) {
DefaultApi apiInstance = new DefaultApi();
String apikey = "AkEzmf5bDGatkBld2PNjJfvRna3hHbZP";
String org = "FRA";
String dest = "LON";
String depDate = "2017-07-06";
Boolean oneWay = false;
String duration = "1";
Boolean direct = true;
String maxPrice = "1000";
String lat = "46.6734";
String lon = "-71.7412";
try {
ExtremeSearchResponse test = apiInstance.flightInspirationSearch(apikey, org, dest,depDate,oneWay,duration,direct,maxPrice,"DAY");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (ApiException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
return null;}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(Long result) {
}
}
如果有人能告诉我这不是 API 中的错误,而是异步任务实现的问题,我会很高兴。