Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Gson解析Android-Json_Android_Gson_Json - Fatal编程技术网

用Gson解析Android-Json

用Gson解析Android-Json,android,gson,json,Android,Gson,Json,我尝试使用Gson将json数据从URL映射到java类。这是该类的代码: public class Sessions { public Boolean active; public String contributor_covu_id; public String created_at; public String key; public String status; public Boolean getActive() { return active; } public void

我尝试使用Gson将json数据从URL映射到java类。这是该类的代码:

public class Sessions {
public Boolean active;
public String contributor_covu_id;
public String created_at;
public String key;
public String status;

public Boolean getActive() {
    return active;
}
public void setActive(Boolean active) {
    this.active = active;
}
public String getContributor_covu_id() {
    return contributor_covu_id;
}
public void setContributor_covu_id(String contributor_covu_id) {
    this.contributor_covu_id = contributor_covu_id;
}
public String getCreated_at() {
    return created_at;
}
public void setCreated_at(String created_at) {
    this.created_at = created_at;
}
public String getKey() {
    return key;
}
public void setKey(String key) {
    this.key = key;
}
public String getStatus() {
    return status;
}
public void setStatus(String status) {
    this.status = status;
}
public String getType() {
    return type;
}
public void setType(String type) {
    this.type = type;
}
public String type;
}

这是调用服务并映射json的类的代码

public static List<Sessions> getSessions(String urlString)
        throws IOException {

    Sessions[] sessions;
    List<Sessions> tempList = null;
    URL url = new URL(urlString);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    GsonBuilder gsonb = new GsonBuilder();
    Gson gson = gsonb.create();
    StringBuilder sb = new StringBuilder();
    String line;

    // Response response = null;
    JSONObject j = null;

    if (conn.getResponseCode() != 200) {
        throw new IOException(conn.getResponseMessage());
    }

    BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));

    while ((line = bufferedReader.readLine()) != null) {
        sb.append(line);
    }
    bufferedReader.close();
    conn.disconnect();

    try {
        j = new JSONObject(sb.toString());
        sessions = gson.fromJson(j.toString(), Sessions[].class);
        tempList = Arrays.asList(sessions);

        // response = gson.fromJson(j.toString(), Response.class);
        // tempList.add(response);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    return tempList;
}
公共静态列表getSessions(字符串urlString)
抛出IOException{
第[]届会议;
List templast=null;
URL=新URL(URL字符串);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
GsonBuilder gsonb=新的GsonBuilder();
Gson-Gson=gsonb.create();
StringBuilder sb=新的StringBuilder();
弦线;
//响应=空;
JSONObject j=null;
如果(连接getResponseCode()!=200){
抛出新IOException(conn.getResponseMessage());
}
BufferedReader BufferedReader=新的BufferedReader(
新的InputStreamReader(conn.getInputStream());
而((line=bufferedReader.readLine())!=null){
某人附加(行);
}
bufferedReader.close();
连接断开();
试一试{
j=新的JSONObject(sb.toString());
sessions=gson.fromJson(j.toString(),sessions[].class);
templast=Arrays.asList(会话);
//response=gson.fromJson(j.toString(),response.class);
//添加(应答);
}捕获(JSONException e){
e、 printStackTrace();
}
返回圣殿骑士;
}
虽然代码是正确的,但我收到一个Gson异常“无法为com.test.Sessions;类调用任何参数构造函数。向Gson注册此类型的InstanceCreator可能会解决此问题”


如何解决此问题并将Gson作为ArrayList返回?

将构造函数添加到您的
会话中
类:

public class Sessions {
    public Boolean active;
    public String contributor_covu_id;
    public String created_at;
    public String key;
    public String status;

    void Sessions()
    {
    }
    .
    .
    .
}
解决办法是:

public class Sessions {

private String status;
private List<Session> sessions;

public String getStatus() {
    return status;
}

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

public List<Session> getSessions() {
    return sessions;
}

public void setSessions(List<Session> sessions) {
    this.sessions = sessions;
}

public static class Session {
    public Boolean active;
    public String contributor_covu_id;
    public String created_at;
    public String key;
    public String status;
    public String name;

};
公开课{
私有字符串状态;
非公开名单会议;
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共列表getSessions(){
返回会议;
}
公共会话(列表会话){
这个。会话=会话;
}
公共静态课堂{
公共布尔活动;
公共字符串contributor_covu_id;
在上创建的公共字符串;
公共字符串密钥;
公共字符串状态;
公共字符串名称;
};

}

我也遇到了同样的错误。我调用服务的代码正确吗?我的原始代码中有一个输入错误:方法名称是
Session
,而不是
Sessions
。请重试。我仍然收到此异常,无法为com.test.sessions;类调用任何参数构造函数;。为此类型向Gson注册InstanceCreator可能会解决此问题。构造函数应该是Sessions()而不是Session(),Session()不是构造函数。。。您需要
public Sessions()
not
void Sessions()
创建一个带有嵌套类的主类,并将其作为对象返回给Gson映射器。正如旁注一样,读取JSON的代码至少有一个bug(不指定输入编码),并且由于逐行读取内容,效率非常低(应该直接将输入源传递给JSON解析库)最后,需要创建中间JSONObject,而不是直接绑定数据内容(GSON可以做到这一点)。