【发布时间】:2017-05-12 11:16:21
【问题描述】:
我正在尝试使用 Laravel REST API 和 Retrovit 从数据库中获取数据。我正在使用一个参数来获取我想要的数据,但它一直返回onFailure,我不知道为什么。这是我的代码:
API 接口
@GET("getDetilFilm/{idFilm}/getDetilFilm")
Call<Film> getDetilFilm(@Query("idFilm") String idFilm);
活动:
public class DetilFilmActivity extends AppCompatActivity {
ApiInterface mApiInterface;
@InjectView(R.id.tvJudulFilm)
TextView judulFilm;
@InjectView(R.id.tvDurasi)
TextView durasi;
@InjectView(R.id.tvGenre)
TextView genre;
@InjectView(R.id.tvSinopsis)
TextView sinopsis;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detil_film);
ButterKnife.inject(this);
getDetilFilmById();
}
private void getDetilFilmById(){
mApiInterface = ApiClient.getClient().create(ApiInterface.class);
Call<Film> callDetilFilm= mApiInterface.getDetilFilm("6");
callDetilFilm.enqueue(new Callback<Film>() {
@Override
public void onResponse(Call<Film> call, Response<Film> response) {
Film detil =response.body();
genre.setText(detil.getIdGenre());
judulFilm.setText(detil.getJudulFilm());
sinopsis.setText(detil.getKeterangan());
durasi.setText(detil.getDurasi());
}
@Override
public void onFailure(Call<Film> call, Throwable t) {
Toast.makeText(DetilFilmActivity.this, "Failed to load", Toast.LENGTH_LONG).show();
}
});
}
}
电影课
public class Film {
@SerializedName("judulFilm")
private String judulFilm;
@SerializedName("durasi")
private String durasi;
@SerializedName("keterangan")
private String keterangan;
@SerializedName("idGenre")
private String idGenre;
@SerializedName("idFilm")
private String idFilm;
private String foto;
private String flag;
private String created_at;
private String updated_at;
@SerializedName("backdrop_path")
private String backdropPath;
public Film(String judulFilm, String durasi, String keterangan, String idGenre, String idFilm, String foto, String flag, String created_at, String updated_at) {
this.judulFilm = judulFilm;
this.durasi = durasi;
this.keterangan = keterangan;
this.idGenre = idGenre;
this.idFilm = idFilm;
this.foto = foto;
this.flag = flag;
this.created_at = created_at;
this.updated_at = updated_at;
}
public String getJudulFilm() {
return judulFilm;
}
public void setJudulFilm(String judulFilm) {
this.judulFilm = judulFilm;
}
public String getDurasi() {
return durasi;
}
public void setDurasi(String durasi) {
this.durasi = durasi;
}
public String getKeterangan() {
return keterangan;
}
public void setKeterangan(String keterangan) {
this.keterangan = keterangan;
}
public String getIdGenre() {
return idGenre;
}
public void setIdGenre(String idGenre) {
this.idGenre = idGenre;
}
public String getIdFilm() {
return idFilm;
}
public void setIdFilm(String idFilm) {
this.idFilm = idFilm;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public String getBackdropPath() {
return backdropPath;
}
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
}
编辑
我把 onResponse 改成这个
@Override
public void onResponse(Call<List<Film>> call, Response<List<Film>> response) {
List<Film> detil =response.body();
try
{
for(int i=0;i<=detil.size();i++)
{
genre.setText(detil.get(i).getIdGenre());
judulFilm.setText(detil.get(i).getJudulFilm());
sinopsis.setText(detil.get(i).getKeterangan());
durasi.setText(detil.get(i).getDurasi());
}
}
catch(Exception e)
{
Log.e("onFailure: ", e.getMessage(), e);
Log.d("onFail", call.request().url().toString());
}
}
错误变为
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
有人可以帮忙吗?提前致谢
【问题讨论】:
-
记录错误信息以了解“为什么”,例如 Log.e("onFailure: ", t.getmessage(), t);
-
你能把你的最终网址贴在这里吗?
-
使用
Log.d("onFail", call.request().url().toString());确保您在正确的网址上请求。 -
@AnandSingh 错误日志返回 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 应为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $
-
@SekarAnindya 这意味着你的 pojo 类有问题
Film