Android как получить json массив после модернизации - PullRequest
0 голосов
/ 17 июня 2020

Вот код запроса на модернизацию

 public void getTransactions() {
    if (common.isNetworkAvailable(WalletActivity.this)) {
        TransactionDetails transactionDetails = new TransactionDetails("employee_wise_date",
            bid, gid, "2019-01-01", "2022-07-01");

        APIService service = apiclient.getTransactions().create(APIService.class);
        Call < Object > call1 = service.
        getTransactions("vqVZ1rEKGs1yKk5ZjOZj9Yco6HEZgoy6ArD9NCwf", transactionDetails);
        call1.enqueue(new Callback < Object > () {
            @Override
            public void onResponse(Call < Object > call,
                Response < Object > response) {

                if (response.isSuccessful()) {
                    common.showtoast("succes", getApplicationContext());
                }
            }

            @Override
            public void onFailure(Call < Object > call, Throwable t) {
                common.showtoast("Failed to get  transaction", getApplicationContext());
            }
        });
    } else {
        common.showtoast("Unable to connect to the internet.", WalletActivity.this);
    }
}  

Вот apiservice

 @POST("dev-wallet-spanner")
    Call<Object> getTransactions(@Header("x-api-key") String key,
                                 @Body TransactionDetails transactionDetails);

здесь параметры, которые я передаю почтальону

{
    "op_type":"employee_wise_date", 
    "bid":"21",
    "gid":"09",
    "from_date":"2019-01-01",
    "to_date":"2022-07-01"
}

Вот ответ, который приходит в почтальоне

[
    {
        "transaction_id": 10166886,
        "api_key": null,
        "arn": "null",
        "bid": "10653721",
        "created_by": "118467809",
        "created_on": "2018-06-03T13:12:46.886000000Z",
        "gid": "11",
        "ip": "2",
        "reference_id": "model",
        "remarks": "On Time Check-In",
        "status": 1,
        "transaction_amount": 100,
        "transaction_type": "credit",
        "currency": "INR",
        "platform": "co",
        "category": "f",
        "transaction_date": "2018-04-01T01:01:01.683000000Z"
    }
]

Я использую модификацию, чтобы сделать запрос api в моем приложении android. Я передаю параметры с модификацией, но не получаю ответа. Но те же параметры хорошо работают с почтальоном. В почтальоне я получаю точный ответ, когда пытаюсь сделать это с кодом, который я не получаю.

Я передаю те же значения, которые я передал почтальону, но ответ не приходит должным образом. Я устанавливаю значения в модальном классе, а затем передаю этот модальный класс в модификацию. Но ответа не приходит. Пожалуйста, помогите с этим, чтобы получить значения.

Ответы [ 2 ]

0 голосов
/ 18 июня 2020
 add @FormUrlEncoded you can use JsonElement in place of Object
 Call<JsonElement>.......

 @FormUrlEncoded
 @POST("dev-wallet-spanner")
 Call<JsonElement> getTransactions(@Header("x-api-key") String key,
                             @Body TransactionDetails transactionDetails);

// и в Java файле должны быть сделаны такие же изменения. Заменить объект на JsonElement

    if (common.isNetworkAvailable(WalletActivity.this)) {
    TransactionDetails transactionDetails = new TransactionDetails("employee_wise_date",
        bid, gid, "2019-01-01", "2022-07-01");

    APIService service = apiclient.getTransactions().create(APIService.class);
    Call < JsonElement > call1 = service.
    getTransactions("vqVZ1rEKGs1yKk5ZjOZj9Yco6HEZgoy6ArD9NCwf", transactionDetails);
    call1.enqueue(new Callback < JsonElement > () {
        @Override
        public void onResponse(Call < JsonElement > call,
            Response < JsonElement > response) {

            if (response.isSuccessful()) {
                common.showtoast("succes", getApplicationContext());
            }
        }

        @Override
        public void onFailure(Call < JsonElement > call, Throwable t) {
            common.showtoast("Failed to get  transaction", getApplicationContext());
        }
    });
} else {
    common.showtoast("Unable to connect to the internet.", WalletActivity.this);
}
 }
0 голосов
/ 17 июня 2020

в моем случае я использую ResponseBody, а не Object

Итак. попробуйте это.

1-й, в службе API,

@FormUrlEncoded  //add this
@POST("dev-wallet-spanner") 
Call<ResponseBody> getTransactions(@Header("x-api-key") String key, @Body TransactionDetails transactionDetails);

2-й, измените код java.

call1.enqueue(new Callback < ResponseBody> () {
            @Override
            public void onResponse(Call < ResponseBody> call,
                Response < ResponseBody> response) {

                try {
                    JSONObject jsonObject = null;
                    try {
                        jsonObject = new JSONObject(response.body().string());
                        if (response.isSuccessful()) {
                           common.showtoast("succes", getApplicationContext());                       

                           //get data using try and catch
                           JSONArray jsonDataArray = jsonObject.getJSONArray("data");
                           //jsonDataArray is what List from retrofit
            ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...