2017-06-05 45 views
0

我是Android新手。我需要从JSON列表中获取字符串列表。它将被添加到Spinner列表中。我有服务器上的列表像如何使用Retrofit 2从JSON列表中获取列表<String>?

[{"bgroup":"A+"},{"bgroup":"A1+"},{"bgroup":"A1-"}]. 

尝试与改造标量。 响应作为

[{"bgroup":"A+"},{"bgroup":"A1+"},{"bgroup":"A1-"}] 

但错误检测为:

预期的字符串,但被BEGIN_OBJECT位于第1个第3列路径$ [0] *

任何更好的方式来检索JSON字符串列表?

+0

它清楚地告诉你,它无法从对象来自哪里读取字符串。为什么不创建一个映射来让'List '后来直接从'Mapping.bgroup'提取一个字符串呢? –

+0

如果您为自定义数据对象使用了相同的字符串,则自动翻新会自动为您提供带有值的格式化数据对象。所以使用相同的密钥。并使用依赖编译'com.squareup.retrofit2:converter-gson:2.0.2' –

+0

@LyubomyrShaydariv感谢您的回答。你可以给这个场景简单的列表例子吗? –

回答

0

这是示例代码:

GroupService groupService = createService(GroupService.class); 

Call<List<Groups>> groupCall = groupService.getGroups(); 

    groupCall.enqueue(new Callback<List<Groups>>() { 
      @Override 
      public void onResponse(retrofit.Response<List<Groups>> response, Retrofit retrofit) { 


      } 

      @Override 
      public void onFailure(Throwable t) { 
       t.printStackTrace(); 

      } 
     }); 

接口:

public interface GroupService { 

@GET("<URL>") 
Call<List<Groups>> getGroups(); 
} 

还可以创建模型的名称组。

我希望这可以帮助你。

0

进行以下模型类(parcelable)

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example implements Parcelable { 

@SerializedName("bgroup") 
@Expose 
private String bgroup; 

public String getBgroup() { 
return bgroup; 
} 

public void setBgroup(String bgroup) { 
this.bgroup = bgroup; 
} 


    protected Example(Parcel in) { 
     bgroup = in.readString(); 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(bgroup); 
    } 

    @SuppressWarnings("unused") 
    public static final Parcelable.Creator<Example> CREATOR = new Parcelable.Creator<Example>() { 
     @Override 
     public Example createFromParcel(Parcel in) { 
      return new Example(in); 
     } 

     @Override 
     public Example[] newArray(int size) { 
      return new Example[size]; 
     } 
    }; 
} 

不是创建接口类这样

public interface ApiService { 

@GET("<URL>") 
Call<List<Example>> getBloodGroups(); 
} 

最后调用改造喜欢以下内容:

Call<List<Example>> call = new RestClient(this).getApiService() 
       .getBloodGroups(); 
     call.enqueue(new Callback<List<Example>>() { 
      @Override 
      public void onResponse(Call<List<Example>> call, Response<List<Example>> response) { 

      } 

      @Override 
      public void onFailure(Call<List<Example>> call, Throwable throwable) { 

      } 
     }); 
+0

是的。你的答案应该有效。但我想使用没有模型类。任何其他简单的方式请问? –

+0

所以你想获得响应作为JSON字符串?? ?? –

+0

我想添加列表的响应值,然后我可以使用spinner下拉菜单。 最后我创建了简单的模型类。它的工作现在。谢谢@Krishna Meena –