0

There are answers to this questions maybe but none of them helped me still getting the same error .

Actually trying to get dynamically generated report in android from server using retrofit .

But I am getting error while returning response . ERROR : onFailure:: Failed java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

Please , I need help .

My Jason

{
"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"
                }
          ]
       }

My Interface .

    public interface ApiInterface {

        @GET("employees/tabData/tablet_reports.php")
         Call < ServerResponseParser > getReport(); 
    }

Retrofit Client .

   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 Class .

   public class LoanDetail {
        @SerializedName("SrNo")
        @Expose
        private String srNo;
        @SerializedName("LoanId")
        @Expose
        private String loanId;
   }   

Just sample provide complete class if needed .

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;
      }
 }

Code in 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 ();
        }
    } );


}
Rashid Kalhoro
  • 320
  • 4
  • 14

0 Answers0