我需要从Retrofit解析JSON数组.我需要获得以下密钥:
{ "rc":0, "message":"success", "he":[ { "name":"\u05de\u05e4\u05e7\u05d7", "type":0 } ] }
我可以很容易地得到消息,但我无法从响应中得到"他"数组.
这是我的数据模型类
public class GetRoleData implements Serializable { @SerializedName("he") private ArrayListhe; @SerializedName("message") private String message; public GetRoleData() { this.he = new ArrayList<>(); this.message = ""; } public ArrayList 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/") CallgetUserRoles(@Body SetParams body);
这是我如何发送请求和处理响应
APIService apiService = retrofit.create(APIService.class); CallapiCall = apiService.getUserRoles(params); apiCall.enqueue(new Callback () { @Override public void onResponse(retrofit.Response 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-beta2:
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") CallgetUserRoles();
MainActivity的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 Callcall = service.getUserRoles(); call.enqueue(new Callback () { @Override public void onResponse(Response response, Retrofit retrofit) { ArrayList 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(Callbackcallback); }
主要活动:
@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); Callbackcallback = new Callback () { @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); }
屏幕截图如下: