Как обработать нулевой или пустой ответ JOSN значения ключа в теле ответа дооснащения 2? - PullRequest
0 голосов
/ 10 февраля 2020

Я использую модификацию 2 в android. Моё приложение имеет значение sh, когда одно из значений возвращает нулевой ключ , например «TOTAL_EXPENSE_AMOUNT»: null . Мой json похож на ниже:

[{
    "YEAR": "2019",
    "TOTAL_AMOUNT": "1580292",
    "TOTAL_EXPENSE_AMOUNT": "1740857",
    "TOTAL_BALANCE": "-160565"
},
 {
    "YEAR": "2018",
    "TOTAL_AMOUNT": "144000",
    "TOTAL_EXPENSE_AMOUNT": null,
    "TOTAL_BALANCE": null
 } ]

1. . Мой модернизированный интерфейс ниже:

public interface Api {

@POST("User/yearly_balance_expense_list.php")
Call<List<Balance_Data_Model>> getBalanceList();

}

2. Мой API-интерфейс ниже:

public class ApiService {

public static final String BASE_URL = IPConfigure.getIP();
Api api = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build().create(Api.class);


  public Call<List<Balance_Data_Model>> getBalanceList(){
    return api.getBalanceList();
    }

 }

** 3. ** Мой файл projo ниже:

public class Balance_Data_Model {

@SerializedName("YEAR")
@Expose
public String year = "";

@SerializedName("TOTAL_AMOUNT")
@Expose
public String total_amount = "";


@SerializedName("TOTAL_EXPENSE_AMOUNT")
@Expose
public String total_expense = "";

@SerializedName("TOTAL_BALANCE")
@Expose
public String total_balance = "";

//getter/setter here

}

** 4. ** Я использовал приведенный ниже код из действия

ApiService apiService = new ApiService();
    Call<List<Balance_Data_Model>> call = apiService.getBalanceList();
    call.enqueue(new Callback<List<Balance_Data_Model>>() {
        @Override
        public void onResponse(Call<List<Balance_Data_Model>> list, Response<List<Balance_Data_Model>> response) {
            Log.e("success--->","success");
            for(Balance_Data_Model m : response.body()){                   
                Log.e("total_expense--->",m.total_expense);
                Log.e("total_balance--->",m.total_balance);

            }
        }

        @Override
        public void onFailure(Call<List<Balance_Data_Model>> call, Throwable t) {
            Log.e("failure--->",t.toString());
        }
    });

Первый л oop все нормально. когда total_balcne равен нулю, приложение имеет значение sh. Пожалуйста, помогите мне

Ответы [ 4 ]

0 голосов
/ 10 февраля 2020

вы можете создать метод для проверки нулевого значения

public String amount (String json){

  if(json == null){

     return "";
  else{
    retrun json;
   }


   use like this `String amount=amount(responce.body().getAmount())`
0 голосов
/ 10 февраля 2020

Журнал не печатает нулевое значение, он дает исключение, если вы хотите напечатать журнал, используйте ниже

   Log.e("total_expense--->",m.total_expense + "");

или вы можете проверить m.total_expense! = Null, а затем печатать без "".

0 голосов
/ 10 февраля 2020

Пожалуйста, обработайте все значения из ответа, это хорошо.

if(response.body() != null){
  for(Balance_Data_Model m : response.body()){
     if(m.total_expense != null)
        Log.e("total_expense--->",m.total_expense);

     if(m.total_balance != null)
        Log.e("total_balance--->",m.total_balance);
    }
 }
0 голосов
/ 10 февраля 2020

Здесь объяснено здесь :

enter image description here

Поэтому правильный способ решения этой проблемы - использование if-else.

 if(m.total_expense!=null)
 Log.e("total_expense--->",m.total_expense);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...