Câu hỏi nhờ bạn Hà Duy Phương đây ạ:
1. Đầu tiên, mục đích của mình là lấy một số thông tin cơ bản ở link API này
https://fantasy.premierleague.com/api/entry/1016/
(nó đơn giản chỉ là một API trong game fantasy football thôi; thông tin ban đầu thì mình muốn lấy các trường "id", "player_first_name", "player_last_name" và "player_region_name")
Công cụ sử dụng là Java và Android Studio
2. Cấp quyền truy cập internet trong file AndroidManifest
<uses-permission android:name="android.permission.INTERNET" />
và cập nhật thư viện retrofit 2 trong build.gradle
implementation 'com.squareup.retrofit2:retrofit:2.7.2'
implementation 'com.squareup.retrofit2:converter-gson:2.7.2'
3. Các file java
a) User.java
package com.example.loveretrofit2;
public class User
{
private long id;
private String player_first_name;
private String player_last_name;
private String player_region_name;
//https://fantasy.premierleague.com/api/entry/1016/
//Setters and getters
@Override
public String toString() {
return "User [id=" + id + ", "
+ "first_name=" + player_first_name + ", "
+ "last_name=" + player_last_name + ", "
+ "region_name=" + player_region_name + "]";
}
}
b) UserApiResponse.java
package com.example.loveretrofit2;
public class UserApiResponse
{
private User data;
//Setters and getters
public String toString() {
return "UserApiResponse [data=" + data + "]";
}
}
c) UserService.java
package com.example.loveretrofit2;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface UserService {
//https://fantasy.premierleague.com/api/entry/1016/
@GET("/api/entry/{id}/")
public Call<UserApiResponse> getUser(@Path("id") long id);
}
d) UserServiceClient.java (chạy ở file này; chọn "run with coverage" với public class UserServiceClient sẽ được nhé)
package com.example.loveretrofit2;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
//https://fantasy.premierleague.com/api/entry/1016/
public class UserServiceClient
{
public static void main(String[] args)
{
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("
https://fantasy.premierleague.com")
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
UserService service = retrofit.create(UserService.class);
Call<UserApiResponse> callSync = service.getUser(1016);
try {
Response<UserApiResponse> response = callSync.execute();
UserApiResponse apiResponse = response.body();
System.out.println(apiResponse);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
e) Sau khi chạy thì chương trình ra lỗi này
---- IntelliJ IDEA coverage runner ----
sampling ...
include patterns:
com\.example\.loveretrofit2\..*
exclude patterns:
java.io.EOFException: End of input at line 1 column 1 path $
at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1401)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:549)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:425)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:207)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:39)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:225)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:188)
at com.howtodoinjava.loveretrofit2.UserServiceClient.main(UserServiceClient.java:32)
Class transformation time: 0.019707087s for 1913 classes or 1.030166596968113E-5s per class
Process finished with exit code 0
Vậy nhờ bạn Hà Duy Phương và cộng đồng hỗ trợ nếu được.
Sent from Nokia 8.1 via OTOFUN