Retrofit 2を使用してJSONオブジェクトを投稿する必要があります。私のJSONオブジェクトは
{"logTime": ""、 "datas":[{"dat1": "1"、 "dat2": ""、 "dat3": ""、 "dat4": ""、 "dat5": ""
}、{"dat1": "1"、 "dat2": ""、 "dat3": ""、 "dat4": ""、 "dat5": ""
}
次のコードを使用してみました:
APIサービス
@FormUrlEncoded
@Headers({
"Content-Type: application/json",
"x-access-token: eyJhbGciOiJIU"
})
@POST("/api/employee/checkin")
Call<String> CHECKIN(@Body String data);
活動クラス
JSONStringer jsonStringer = null;
try {
jsonStringer=new JSONStringer().object().key("logTime").value("")
.key("datas")
.array()
.object().key("dat1").value("1")
.key("dat2").value("3")
.key("dat3").value("5")
.key("dat4").value("5")
.endObject()
.endArray()
.endObject();
} catch (JSONException e) {
e.printStackTrace();
}
ApiService service = retroClient.getApiService();
Call<String> login = service.CHECKIN(String.valueOf(jsonStringer));
login.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
dialog.dismiss();
try {
String val = response.body();
} catch (Exception e) {
e.getMessage();
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
このコードを使用しているときに「エラー:レトロフィットアノテーションが見つかりませんでした(パラメーター#2)」が表示されました。私を助けてください。前もって感謝します。
このコードを試してください
APIサービス
@POST("/api/employee/checkin")
Call<Sample> CHECKIN(@Body JSONStringer data);
APIクライアント
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
// Request customization: add request headers
Request.Builder requestBuilder = original.newBuilder()
.addHeader("Content-Type", "application/json")
.addHeader("x-access-token", "eyJhbGci");
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.build();
return new Retrofit.Builder()
.baseUrl(ROOT_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
アクティビティ
ApiService service = retroClient.getApiService();
Call<Sample> call = service.CHECKIN(jsonStringer);
call.enqueue(new Callback<Sample>() {
@Override
public void onResponse(Call<Sample> call, Response<Sample> response) {
dialog.dismiss();
if (response.isSuccessful()) {
Sample result = response.body();
} else {
// response received but request not successful (like 400,401,403 etc)
//Handle errors
}
}
@Override
public void onFailure(Call<Sample> call, Throwable t) {
dialog.dismiss();
Toast.makeText(MainActivity.this, "Network Problem", Toast.LENGTH_LONG).show();
}
});
GSON libを使用
この依存関係をbuild.gradleに追加します
compile 'com.google.code.gson:gson:2.8.0'
APIサービス
@Headers({
"Content-Type: application/json",
"x-access-token: eyJhbGciOiJIU"
})
@POST("/api/employee/checkin")
Call<String> CHECKIN(@Body String data);
アクティビティクラス
try {
JsonArray datas = new JsonArray();
JsonObject object = new JsonObject();
object.addProperty("dat1","1");
object.addProperty("dat2", "");
object.addProperty("dat3", "");
object.addProperty("dat4", "");
object.addProperty("dat5", "");
datas.add(object);
JsonObject req = new JsonObject();
req.addProperty("logTime", "");
req.addProperty("datas", new Gson().toJson(datas));
} catch (Exception e) {
e.printStackTrace();
}
ApiService service = retroClient.getApiService();
Call<String> login = service.CHECKIN(String.valueOf(req));
login.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
dialog.dismiss();
try {
String val = response.body();
} catch (Exception e) {
e.getMessage();
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
_@FormUrlEncoded
_アノテーションを使用する場合、_@Field
_ではなく_@Body
_ paramを使用してパラメーターを渡します。したがって、これを行います:
_@FormUrlEncoded
@Headers({
"Content-Type: application/json",
"x-access-token: eyJhbGciOiJIU"
})
@POST("/api/employee/checkin")
Call<String> CHECKIN(@Field("data") String data);
_
私はあなたのサーバーがdata
キーを期待していると仮定しました。これには詳細が含まれます。それ以外の場合は、ここで変更してください@Field("data")
編集:
コメントに基づいて:
_@FormUrlEncoded
@Headers({
"Content-Type: application/json",
"x-access-token: eyJhbGciOiJIU"
})
@POST("/api/employee/checkin")
Call<String> CHECKIN(@Field("logTime") String logTime, @Field("datas") String datas);
_