Возможно, есть ответы на эти вопросы, но ни один из них не помог мне все еще получить ту же ошибку.
На самом деле пытается получить динамически сгенерированный отчет в Android с сервера с помощью модернизации.
Но я получаю ошибку при возврате ответа. ОШИБКА: onFailure :: Failed java.lang.IllegalStateException: ожидаемый BEGIN_OBJECT, но в строке 1 путь 1 столбца 1 $ STRING $
Пожалуйста, мне нужна помощь.
Мой Джейсон
{
"LoanDetails": [
{
"SrNo": "1",
"LoanId": "BN582517",
"StaffName": "Some Name",
"Gender": "Male",
"DisbursementDate": "2019-09-11",
"RecoveryDate": "2019-10-11",
"NameOfBorrower": "Muhammad Hassan Magsi",
"GuardianName": "Allah Dino",
"NICNumber": "Some CNIC",
"RegionName": "Some Name",
"LoanAmountPrincipal": "100000",
"InterestRate": "22",
"LoanTerm": "12",
"TotalLoanAmount": "123000.0000",
"TotalRecoveredAmount": "0",
"Balance": "Balance",
"LastPaymentDate": "--",
"DueInstallment": "0",
"OverDues": "0",
"TotalDues": "0",
"PrePayment": "0",
"ReceiptNo": "3124",
"AmountRecovered": "",
"RemainingDues": "",
"Date": "2019-09-11"
}
]
}
Мой интерфейс.
public interface ApiInterface {
@GET("employees/tabData/tablet_reports.php")
Call < ServerResponseParser > getReport();
}
Модифицированный клиент.
public class ApiClient {
public static final String BASE_URL = "http://mmsold.safcosupport.org/";
public static Retrofit retrofit = null;
public static final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(5, TimeUnit.MINUTES)
.connectTimeout(5, TimeUnit.MINUTES)
.build();
public static Retrofit getClient() {
if (retrofit == null) {
Gson gson = new GsonBuilder ()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory( GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
}
Класс POJO.
public class LoanDetail {
@SerializedName("SrNo")
@Expose
private String srNo;
@SerializedName("LoanId")
@Expose
private String loanId;
}
Просто образец предоставьте полный класс, если это необходимо.
ServerResponseParser Class
public class ServerResponseParser implements Serializable {
@SerializedName("LoanDetails")
@Expose
private ArrayList <LoanDetail> loanDetails = new ArrayList <LoanDetail>( );
public ArrayList < LoanDetail > getLoanDetails () {
return loanDetails;
}
public void setLoanDetails ( ArrayList < LoanDetail > loanDetails ) {
this.loanDetails = loanDetails;
}
}
Код в MainActivity
public void getReport(){
progressDialog = new ProgressDialog (MainActivity.this);
progressDialog.setMessage("Fetching Data...");
progressDialog.setCancelable(false);
progressDialog.show();
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<ServerResponseParser> call = apiService.getReport ();
call.enqueue ( new Callback < ServerResponseParser > () {
@Override
public void onResponse ( Call < ServerResponseParser > call , Response < ServerResponseParser > response ) {
if (response.isSuccessful ()){
ArrayList<LoanDetail> statioList = response.body().getLoanDetails ();
Log.e ( "onResponse: " , statioList.toString () + "" );
}else {
Log.e ( "onResponse: " , "Empty Response" + response.body ().toString () );
}
progressDialog.dismiss ();
}
@Override
public void onFailure ( Call < ServerResponseParser > call , Throwable t ) {
Log.e ( "onFailure: " , "Failed " + t.getMessage () );
progressDialog.dismiss ();
}
} );
}