无法使用改造获取数据

时间:2016-03-22 18:38:51

标签: android json gson retrofit2

您好我正在尝试使用改造但是我收到此错误: -

  

java.lang.IllegalStateException:预期为BEGIN_OBJECT但在第1行第2行路径为BEGIN_ARRAY $

这是我的MainActivity

public class MainActivity extends AppCompatActivity {

@Bind(R.id.activity_main_tv_display)
TextView textData;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
}
@OnClick(R.id.activity_main_btn_show)
void press() {
    RemoteApi.Factory.getInstance().getModel().enqueue(new Callback<Model>() {
        @Override
        public void onResponse(Call<Model> call, Response<Model> response) {
            textData.setText(response.toString());
            Log.e("--success--", String.valueOf(response));
        }
        @Override
        public void onFailure(Call<Model> call, Throwable t) {
            Log.e("--fail--", t.getMessage());
        }
    });
  }
}

这是我的模特

public class Model {

@SerializedName("Title")
@Expose
private String Title;
@SerializedName("Message")
@Expose
private String Message;
@SerializedName("id")
@Expose
private int id;
// getters and setters declare
}

这是我的界面

public interface RemoteApi {

String BASE_URL = "xyz/";
@GET("api/Cards")
Call<Model> getModel();
class Factory {
    public static RemoteApi remoteApi;
    public static RemoteApi getInstance() {
            Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(BASE_URL)
                    .build();
            remoteApi = retrofit.create(RemoteApi.class);
            return remoteApi;
        }
    }
}

我的API看起来像这样

[{
  "Title": "xyz",
  "Message": "hello",
  "id": 1
}, {
  "Title": "abc",
  "Message": "hello",
  "id": 2
}] 

1 个答案:

答案 0 :(得分:0)

你想从你的API中获取一个对象列表(通过查看第一个字符),但是你的错误表明它需要一个Object(同样,通过查看第一个字符)。您在界面中使用Call<Model>,表示您只需要返回一个Model对象,而不是它们的列表。

尝试设置界面

public interface RemoteApi {

    String BASE_URL = "xyz/";
    @GET("api/Cards")
    Call<List<Model>> getModel();

和其他代码一样

RemoteApi.Factory.getInstance().getModel().enqueue(new Callback<List<Model>>() {
        @Override
        public void onResponse(Call<List<Model>> call, Response<List<Model>> response) {
            String responseString = String.valueOf(response);
            textData.setText(responseString);
            Log.e("--success--", responseString);
        }
        @Override
        public void onFailure(Call<List<Model>> call, Throwable t) {
            Log.e("--fail--", t.getMessage());
        }
    });