hac*_*tsu 26 android json retrofit
我们的团队决定使用Retrofit 2.0,我正在对这个库进行一些初步研究.如标题中所述,我想通过我们的Android应用程序中的Retrofit 2.0解析一些嵌套的JSON对象.
例如,这是一个嵌套的JSON对象,格式为:
{
"title": "Recent Uploads tagged android",
"link": "https://www.flickr.com/photos/tags/android/",
"description": "",
"modified": "2015-10-05T05:30:01Z",
"generator": "https://www.flickr.com/",
"items": [
{
"title": ...
"link": ...
"media": {"m":"This is the value I want to get:)"}
"description": ...
"published": ...
"author": ...
"author_id": ...
"tags": ...
},
{...},
...
]
}
Run Code Online (Sandbox Code Playgroud)
我对items数组中的JSON对象感兴趣.我注意到有一些关于通过Retrofit 1.X解析嵌套JSON对象的帖子,但是最新的Retrofit 2.0 API已经发生了很大变化,这在将它们适应新API时会让人感到困惑.
我想到了两种可能的解决方案:
StringConverter.(我可能错了〜)更新:我们实际上可以通过设置JSONElement为HTTP API接口的pojo并使用Retrofit提供的GSONConverter作为转换器来获取原始响应.
Pan*_*mar 34
假设您的完整JSON看起来像
{
"title": "Recent Uploads tagged android",
"link": "https://www.flickr.com/photos/tags/android/",
"description": "",
"modified": "2015-10-05T05:30:01Z",
"generator": "https://www.flickr.com/",
"items": [
{
"member1": "memeber value",
"member2": "member value"
},
{
"member1": "memeber value",
"member2": "member value"
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以Pojo课程会是
public class MainPojo {
private String title;
private String description;
private String link;
private String generator;
private String modified;
private ArrayList<Items> items;
// Getters setters
}
public class Items {
private String member2;
private String member1;
// Getters setters
}
Run Code Online (Sandbox Code Playgroud)
注意:这是您的JSON的类似解决方案.如果JSON具有其他键,则可以更改Items.java的成员.
将Pojo更新为新的JSON
public class Items {
private String tags;
private String author;
private String title;
private String description;
private String link;
private String author_id;
private String published;
private Media media;
// Getters and Setters
}
public class Media {
private String m;
// Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)
以下代码将有助于获取嵌套的json对象和数组
例如:json
{
"similar_product":[
{ .....
}
],
"options":{
"Blouse Length":[
{ "value_id":"696556",
}
Run Code Online (Sandbox Code Playgroud)
首先我们需要创建模型类,我们可以使用的json项中的模型类项名称相同 @SerializedName("for exact json name")
public class Product {
public Options options;
public void setOptions(Options options) {
this.options = options;
}
public Options getOptions() {
return options;
}
// length...
public class Options
{
@SerializedName("Blouse Length")
private ArrayList<BlouseLength> blouseLengths;
public void setBlouseLengths(ArrayList<BlouseLength> blouseLengths) {
this.blouseLengths = blouseLengths;
}
public ArrayList<BlouseLength> getBlouseLengths() {
return blouseLengths;
}
}
public class BlouseLength {
String value_id;
public void setValue_id(String value_id) {
this.value_id = value_id;
}
public String getValue_id() {
return value_id;
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建用于改造的界面以在URL中获取json项目
// don't need to put values of id in retrofit
ex:: "/api-mobile_.php?method=getProductById&pid="
Run Code Online (Sandbox Code Playgroud)
只需在查询中传递url参数,它就会自动获取网址
例如:
public interface Retrofit_Api {
@FormUrlEncoded
@GET("/api-mobile_.php?method=getProductById")
Call<Product> responseproduct(@Query("pid") String pid);
}
Run Code Online (Sandbox Code Playgroud)
在您的主类
String pid=editid.getText().toString();
final Retrofit adapter = new Retrofit.Builder()
.baseUrl(Product_url)
.addConverterFactory(GsonConverterFactory.create())
.build();
//Creating an object of our api interface
Retrofit_Api api = adapter.create(Retrofit_Api.class);
Call<Product> call = api.responseproduct(pid);
call.enqueue(new Callback<Product>() {
@Override
public void onResponse(Call<Product> call, Response<Product> response) {
ArrayList<Product.BlouseLength> p= new ArrayList(response.body().getOptions().getBlouseLengths());
Editadapter editadapter=new Editadapter(MainActivity.this,p);
recyclerView.setAdapter(editadapter);
}
@Override
public void onFailure(Call<Product> call, Throwable t) {
Log.d("Error", t.getMessage());
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31474 次 |
| 最近记录: |