【问题标题】:how to parse Json using retrofit2如何使用retrofit2解析Json
【发布时间】:2017-08-12 07:31:56
【问题描述】:

我有一些 json 响应。 帮助我在改造 2 中解析此响应 { “状态”:“成功”, “代码”:“200”, “消息”:{ 《老歌》:[ { “id”:“8”, “名称”:“tttt”, "album_image": "admin/upload/default_album_300_g4.png" }, { “id”:“9”, “名称”:“gggg”, “album_image”:“管理员/上传/Jellyfish.jpg” } ], “最新歌曲”:[ { “id”:“9”, “名称”:“gggg”, “album_image”:“管理员/上传/Jellyfish.jpg” } ] } } 我的 Json 的所有 pojo 类都是.....

public class Example {

@SerializedName("status")
@Expose
private String status;
@SerializedName("code")
@Expose
private String code;
@SerializedName("messages")
@Expose
private Messages messages;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public Messages getMessages() {
    return messages;
}

public void setMessages(Messages messages) {
    this.messages = messages;
}

}

public class Messages extends ArrayList<Messages> {

@SerializedName("Old Songs")
@Expose
private List<OldSong> oldSongs = null;
@SerializedName("Latest Songs")
@Expose
private List<LatestSong> latestSongs = null;

public List<OldSong> getOldSongs() {
    return oldSongs;
}

public void setOldSongs(List<OldSong> oldSongs) {
    this.oldSongs = oldSongs;
}

public List<LatestSong> getLatestSongs() {
    return latestSongs;
}

public void setLatestSongs(List<LatestSong> latestSongs) {
    this.latestSongs = latestSongs;
}

}

public class OldSong {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("album_image")
@Expose
private String albumImage;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAlbumImage() {
    return albumImage;
}

public void setAlbumImage(String albumImage) {
    this.albumImage = albumImage;
}

}

public class LatestSong {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("album_image")
@Expose
private String albumImage;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAlbumImage() {
    return albumImage;
}

public void setAlbumImage(String albumImage) {
    this.albumImage = albumImage;
}

}

我的 MainActivity 类是...

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener {
Button send;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    send=(Button)findViewById(R.id.send);
    send.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    /**
     * Checking Internet Connection
     */
    if (InternetConnection.checkConnection(getApplicationContext())) {
        final ProgressDialog dialog;
        /**
         * Progress Dialog for User Interaction
         */
        dialog = new ProgressDialog(MainActivity.this);
        dialog.setTitle("json load");
        dialog.setMessage("getting json");
        dialog.show();
        //Creating an object of our api interface
        ApiService api = RetroClient.getApiService();

        /**
         * Calling JSON
         */
        Call<Example> call = api.getMyJSON();
        /**
         * Enqueue Callback will be call when get response...
         */
        call.enqueue(new Callback<Example>() {
            @Override
            public void onResponse(Call<Example> call, Response<Example> response) {
                dialog.dismiss();
                if(response.isSuccessful()) {
                    //want here to parse  response

                } else {
                    Snackbar.make(parentView,"something wrong" , Snackbar.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(Call<Example> call, Throwable t) {
                dialog.dismiss();
            }
        });

    } else {
        Snackbar.make(parentView, "internet_connection_not_available", Snackbar.LENGTH_LONG).show();
    }
}

}

【问题讨论】:

  • 深入谷歌你会发现很多答案。如果您遇到任何错误,请发布它

标签: android json android-asynctask retrofit2


【解决方案1】:

你必须像下面这样创建类。

    public class LatestSong {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("album_image")
@Expose
private String albumImage;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAlbumImage() {
return albumImage;
}

public void setAlbumImage(String albumImage) {
this.albumImage = albumImage;
}

}

第 2 类:

public class Messages {

@SerializedName("Old Songs")
@Expose
private List<OldSong> oldSongs = null;
@SerializedName("Latest Songs")
@Expose
private List<LatestSong> latestSongs = null;

public List<OldSong> getOldSongs() {
return oldSongs;
}

public void setOldSongs(List<OldSong> oldSongs) {
this.oldSongs = oldSongs;
}

public List<LatestSong> getLatestSongs() {
return latestSongs;
}

public void setLatestSongs(List<LatestSong> latestSongs) {
this.latestSongs = latestSongs;
}

}

第 3 类:

public class OldSong {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("album_image")
@Expose
private String albumImage;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAlbumImage() {
return albumImage;
}

public void setAlbumImage(String albumImage) {
this.albumImage = albumImage;
}

}

第 4 类:

public class Response {

@SerializedName("status")
@Expose
private String status;
@SerializedName("code")
@Expose
private String code;
@SerializedName("messages")
@Expose
private Messages messages;

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public Messages getMessages() {
return messages;
}

public void setMessages(Messages messages) {
this.messages = messages;
}

}

现在你必须为你的改造设置Response.class

【讨论】:

  • 我拥有所有 pojo 类,但我想解析这个 Json
猜你喜欢
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多