Intereting Posts
Android с абзацем и нумерацией / пулями в текстовом режиме Открыть файл при нажатии уведомления? Intent.ACTION_VIEW для Android Image Не удается создать после обновления до Android Studio 2.3 Обнаружить форму касания на iphone или андроид? Лицензирование приложений и защита от копирования на Android Полноэкранное видео без разрыва Формат Android CATEGORY HOME на 4.1.2 Каковы лучшие практики для разработки приложений с использованием Titanium Framework, ориентированного на iPhone и Android? Общие настройки перезагружаются, когда приложение принудительно закрывается или падает Как получить статистику сетевого трафика для приложений потоковой передачи видео на Android? Создайте библиотеку Android-openssl для платформы 2.1 Есть ли эквивалент addHeaderView для RecyclerView? Твердые черные экраны при вызове Dialogs в onCreate () Android: отображение клавиатуры перемещает мои компоненты вверх, я хочу скрыть их

Получите массив JSON от перенастройки Response

Мне нужно проанализировать массив JSON из Retrofit. Мне нужно получить следующий ключ:

{ "rc":0, "message":"success", "he":[ { "name":"\u05de\u05e4\u05e7\u05d7", "type":0 } ] } 

Я могу легко получить сообщение, но я не могу получить массив «he» от ответа.

Вот мой класс модели данных

 public class GetRoleData implements Serializable { @SerializedName("he") private ArrayList<Roles> he; @SerializedName("message") private String message; public GetRoleData() { this.he = new ArrayList<>(); this.message = ""; } public ArrayList<Roles> getUserRoles() { return he; } public String getMessage() { return message; } public class Roles { public Roles() { name = ""; type = -1; } @SerializedName("name") private String name; @SerializedName("type") private int type; public int getType() { return type; } public String getName() { return name; } } } 

Вот как я отправляю запрос на сервер:

 @POST("index.php/") Call<GetRoleData> getUserRoles(@Body SetParams body); 

Вот как я отправляю запрос и обработку ответа

 APIService apiService = retrofit.create(APIService.class); Call<GetRoleData > apiCall = apiService.getUserRoles(params); apiCall.enqueue(new Callback<GetRoleData >() { @Override public void onResponse(retrofit.Response<GetRoleData > mUserProfileData, Retrofit retrofit) { Log.e("locale info", "mUserProfileData = " + mUserProfileData.body().toString()); if (pDialog != null) { pDialog.dismiss(); } if (mUserProfileData.body().getMessage().equals("success")) { Log.e("locale info", "user roles = " + mUserProfileData.body().getUserRoles().size()); } else { Toast.makeText(RegisterActivity.this, getResources().getString(R.string.get_role_error), Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Throwable t) { if (pDialog != null) { pDialog.dismiss(); } t.printStackTrace(); } }); 

Что я хочу

Мне нужно получить массив «he» из вышеприведенного ответа. Пожалуйста, помогите Спасибо.

Вот ответ, который я получаю ..

Введите описание изображения здесь

ОБНОВЛЕНИЕ ДЛЯ Дооснащения 2.0-бета2:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.google.code.gson:gson:2.4' compile 'com.squareup.okhttp:okhttp:2.5.0' // compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' } 

Интерфейс:

 @GET("/api/values") Call<GetRoleData> getUserRoles(); 

MainActivity's onCreate:

  // Retrofit 2.0-beta2 Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL_BASE) .addConverterFactory(GsonConverterFactory.create()) .build(); WebAPIService service = retrofit.create(WebAPIService.class); // Asynchronous Call in Retrofit 2.0-beta2 Call<GetRoleData> call = service.getUserRoles(); call.enqueue(new Callback<GetRoleData>() { @Override public void onResponse(Response<GetRoleData> response, Retrofit retrofit) { ArrayList<GetRoleData.Roles> arrayList = response.body().getUserRoles(); if (arrayList != null) { Log.i(LOG_TAG, arrayList.get(0).getName()); } } @Override public void onFailure(Throwable t) { Log.e(LOG_TAG, t.toString()); } }); 

Дооснащение 1.9

Я использую ваш класс GetRoleData

Интерфейс:

 public interface WebAPIService { @GET("/api/values") void getUserRoles(Callback<GetRoleData> callback); } 

Основная деятельность:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // creating a RestAdapter using the custom client RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(API_URL_BASE) .setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(mOkHttpClient)) .build(); WebAPIService webAPIService = restAdapter.create(WebAPIService.class); Callback<GetRoleData> callback = new Callback<GetRoleData>() { @Override public void success(GetRoleData getRoleData, Response response) { String bodyString = new String(((TypedByteArray) response.getBody()).getBytes()); Log.i(LOG_TAG, bodyString); } @Override public void failure(RetrofitError error) { String errorString = error.toString(); Log.e(LOG_TAG, errorString); } }; webAPIService.getUserRoles(callback); } 

Снимок экрана:

Введите описание изображения здесь

Mocky для тестов -> http://www.mocky.io/v2/567275072500008d0e995b2c Я использую Retrofit 2 (beta-2). Это работает для меня, ничего особенного в этом:

Определение вызова:

 @GET("/v2/567275072500008d0e995b2c") Call<Base> getMock(); 

Модели:

 public class Base { public int rc; public String message; public List<Role> he; } public class Role { public String name; public int type; } 

Модифицированные:

 Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); 

Вызов:

 webservice.getMock().enqueue(new Callback<Base>() { @Override public void onResponse(Response<Base> response, Retrofit retrofit) { } @Override public void onFailure(Throwable t) { } }); 

// Используйте следующие классы Pojo

 public class GetRoleData { @SerializedName("rc") @Expose private Integer rc; @SerializedName("message") @Expose private String message; @SerializedName("he") @Expose private List<He> he = new ArrayList<He>(); /** * * @return * The rc */ public Integer getRc() { return rc; } /** * * @param rc * The rc */ public void setRc(Integer rc) { this.rc = rc; } /** * * @return * The message */ public String getMessage() { return message; } /** * * @param message * The message */ public void setMessage(String message) { this.message = message; } /** * * @return * The he */ public List<He> getHe() { return he; } /** * * @param he * The he */ public void setHe(List<He> he) { this.he = he; } } -----------------------------------com.example.He.java----------------------------------- package com.example; import javax.annotation.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class He { @SerializedName("name") @Expose private String name; @SerializedName("type") @Expose private Integer type; /** * * @return * The name */ public String getName() { return name; } /** * * @param name * The name */ public void setName(String name) { this.name = name; } /** * * @return * The type */ public Integer getType() { return type; } /** * * @param type * The type */ public void setType(Integer type) { this.type = type; } } 

Вы написали все свои геттеры, кроме he правильно. Чтобы Retrofit проанализировал ваш JSON-файл, вы должны написать свой getter для he как указано ниже.

 public ArrayList<Roles> getHe() { return he; } 

Кроме того, попробуйте удалить новый ArrayList из конструктора.

 public GetRoleData() { // this.he = new ArrayList<>(); // <-- Remove here this.message = ""; } 

Другим простым способом получения данных с помощью web- JsonElement является использование JsonElement а затем преобразование его в JsonObject и анализ JsonObject. Ez-Pz.

Примечание . JsonObject не такой же, как JSONobject, JsonObject принадлежит библиотеке GSON