私は自分のREST呼び出しをレトロフィットを使用して使用しようとしています。それが機能しない理由の唯一の手がかりは、情報のタイプが「text/html」であるにもかかわらず確かにそれはjsonです。私が問題を解決する答えを見つけられなかったと言われています。
ペイロード:
[
{
"user_id": "32",
"username": "Marko",
"last_activity": "2020-04-26 20:44:00",
"user_image": "slika2"
},
{
"user_id": "33",
"username": "dejan",
"last_activity": "2020-04-26 20:44:00",
"user_image": "slika3"
}
]
私のチャットクラス:
public class Chat {
@SerializedName("user_id")
private String userId;
private String username;
@SerializedName("last_activity")
private String lastActivity;
@SerializedName("user_image")
private String userImage;\
...constructor/getters
}
APIインターフェース:
@FormUrlEncoded
@POST("api_get_all_chats.php")
Call<List<Chat>> getChats(
@Field("id") String id
);
APIクライアント:
public static Retrofit getClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.level(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
retrofit = new Retrofit.Builder()
.baseUrl("http://MYIP/emob%20projekat/api/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
return retrofit;
}
そしてリクエスト全体:
apiInterface = ApiClient.getClient().create(userApi.class);
Call<List<Chat>> call = apiInterface.getChats(u.getUserInfo().getUserId());
call.enqueue(new Callback<List<Chat>>() {
@Override
public void onResponse(Call<List<Chat>> call, Response<List<Chat>> response) {
chatList = new ArrayList<>(response.body());
chatAdapter = new ChatAdapter(getApplication().getApplicationContext(), R.layout.user_view, chatList);
listView.setAdapter(chatAdapter);
}
@Override
public void onFailure(Call<List<Chat>> call, Throwable t) {
Toast.makeText(getApplication().getApplicationContext(), "ne valja" , Toast.LENGTH_LONG).show();
}
});
私がめちゃくちゃになっているどんな種類の手がかりも大歓迎です。
最初にリクエストをログに記録し、ヘッダー、URL、本文、応答とともに送信内容を正確に確認します。 https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor =
次に、POSTリクエストを作成する必要があると確信していますか?