İstek gönderiyorum, ancak istek başarılı olsa bile bir istisna alıyorum (Etkileşim kurduğum API, başarıya OTP gönderir).Retrofit 2'de hatalı biçimlendirilmiş JSON nasıl edinilir
istisnadır: Şimdi hatalı biçimlendirilmiş JSON olduğunu nasıl göreceğini
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 2 path $
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1573)
at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1423)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:575)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:429)
at com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:349)
at com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:346)
at com.google.gson.TypeAdapter.fromJson(TypeAdapter.java:256)
at retrofit.GsonConverter.fromBody(GsonConverter.java:42)
at retrofit.OkHttpCall.parseResponse(OkHttpCall.java:144)
at retrofit.OkHttpCall.access$000(OkHttpCall.java:25)
at retrofit.OkHttpCall$1.onResponse(OkHttpCall.java:90)
at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:168)
at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
? Json nesnesinin hatalı oluşturulup oluşturulmadığını öğrenmek için, eğer iade edilen nesne ise (ki bu bir dizge olmasını bekliyorum) veya gönderdiğim nesnedir.
Bu önemsiz bir soru olursa beni affet, bu hafta itibariyle yalnızca Android geliştirmeyle başladım.
public static EnrollmentApiInterface getApiClient(){
if (EnrollmentRequest == null) {
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
Request request = chain.request();
Buffer buffer = new Buffer();
request.body().writeTo(buffer);
String body = buffer.readUtf8();
Log.println(10, TAG, body);
Log.i(TAG, "hello: " + response);
String bodyString = response.body().string();
Log.i(TAG, bodyString);
response = response.newBuilder()
.body(ResponseBody.create(response.body().contentType(), bodyString))
.build();
return response;
}
});
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
Retrofit retrofit = new Retrofit.Builder()
// .baseUrl("http://10.0.2.2:6543/") // On AVD
.baseUrl("http://192.168.0.106:6543") // On device
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
EnrollmentRequest = retrofit.create(EnrollmentApiInterface.class);
}
return EnrollmentRequest;
}
Arabirim: Sorunun ne göreceksiniz böylece
EnrollmentRequest request = new EnrollmentRequest();
request.setMsisdn(MsisdnTxt.getText().toString());
request.setId_number(IdNumberTxt.getText().toString());
EnrollmentApiClient.EnrollmentApiInterface service = EnrollmentApiClient.getApiClient();
Log.i(TAG, "REQUEST: " + request.toJson());
Call<String> call = service.RequestEnrollment(request.toJson());
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Response<String> response) {
Log.i(TAG, "ON RESPONSE" + response);
Log.i(TAG, "ON RESPONSE BODY" + response.body());
// Create object of SharedPreferences.
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(that);
//now get Editor
SharedPreferences.Editor editor = sharedPref.edit();
//put your value
editor.putString("IDnumber", IdNumberTxt.getText().toString());
editor.putString("Msisdn", MsisdnTxt.getText().toString());
//commits your edits
editor.commit();
Log.i(TAG, "onClick-AFTER");
Intent intent = new Intent(getApplicationContext(), AuthoriseActivity.class);
startActivity(intent);
}
@Override
public void onFailure(Throwable t) {
// It always comes in here
Log.i(TAG, "NOTHERE", t);
Log.d("CallBack", " Throwable is " + t.toString());
Toast.makeText(EnrollActivity.this, "Request Failed", Toast.LENGTH_LONG).show();
}
});
Merhaba yanıtı ile birlikte güçlendirme parametresi vardır beta-2 yayımladı güçlendirme size hangi yardımcı olacaktır ham verileri yanıt olarak görüntüle. Sorununuz, sunucudan gönderilen yanıt geçerli bir biçimde değil. Kendi gsonConverter'ınızı oluşturabilir, bağdaştırıcınızın içine girebilir ve içeride sunucuyu dizgeden dönüştürerek yanıtı görebilirsiniz. – subhash
@subhash Bir dize dönüştürücü ekledim, çünkü yanıtın bir dize olmasını bekliyorum, ancak yine de aynı hatayı alıyorum. herhangi bir fikir? – Renier