当前位置: 首页 > 知识库问答 >
问题:

应为BEGIN_ARRAY,但BEGIN_OBJECT位于第1行第2列路径$-REVERFIT 2 Android

王宏扬
2023-03-14

错误:java.lang.IllegalStateException:应为begin_array,但为begin_object

我不知道怎么解决这个问题

我在这里包含了我的完整代码

这是我的JSON

 {"fom_combine":[{"mTitle":"Talaash","mYear":"2012"},{"mTitle":"Race 2","mYear":"2013"},{"mTitle":"October","mYear":"2018"},{"mTitle":"MS Dhoni: The Untold Story","mYear":"2016"},{"mTitle":"Phantom","mYear":"2015"},{"mTitle":"Baby","mYear":"2015"}]}

search_movie.class

public class Search_Movie {
@SerializedName("mTitle")
@Expose
private String mTitle;

@SerializedName("mYear")
@Expose
private long mYear;

public Search_Movie(String mTitle, long mYear) {
    this.mTitle = mTitle;
    this.mYear = mYear;
}

public String getmTitle() {
    return mTitle;
}

public long getmYear() {
    return mYear;
}}

apiclient.java

public class ApiClient {
public static final String BASE_URL = "https://example.com/search/";
public static Retrofit retrofit;

public static Retrofit getApiClient(){
    if (retrofit==null){
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}}
public interface ApiInterface {
@GET("fom_combine.php")
Call<List<Search_Movie>> getContact(
        @Query("name") String keyword
);}
....
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private List<Search_Movie> contacts;
private Search_Adapter adapter;
private ApiInterface apiInterface;
ProgressBar progressBar;

    ....

    progressBar = findViewById(R.id.prograss);
    recyclerView = findViewById(R.id.recyclerView);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    fetchContact( "");

   .....
       public void fetchContact( String key){

    apiInterface = ApiClient.getApiClient().create(ApiInterface.class);

    Call<List<Search_Movie>> call = apiInterface.getContact(key);
    call.enqueue(new Callback<List<Search_Movie>>() {
        @Override
        public void onResponse(Call<List<Search_Movie>> call, Response<List<Search_Movie>> response) {
            progressBar.setVisibility(View.GONE);
            contacts = response.body();
            adapter = new Search_Adapter(contacts, Search_Activity.this);
            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onFailure(Call<List<Search_Movie>> call, Throwable t) {
            progressBar.setVisibility(View.GONE);
            Toast.makeText(Search_Activity.this, "Error\n"+t.toString(), Toast.LENGTH_LONG).show();
        }
    });
}

共有1个答案

徐文彬
2023-03-14

您需要创建另一个类

public class FomCombine {
    @SerializedName("fom_combine")
    @Expose
    private List<Search_Movie> fom_combine;



    public FomCombine(List<Search_Movie> fom_combine) {this.fom_combine = fom_combine;}

public List<Search_Movie> getfom_combine() {
    return fom_combine;
}

 }

然后将调用 >调用=apiinterface.getcontact(key); 更改为

Call<FomCombine> call = apiInterface.getContact(key);

与之相同

@GET("fom_combine.php")
Call<List<Search_Movie>> getContact(
        @Query("name") String keyword
);}
@GET("fom_combine.php")
    Call<FomCombine> getContact(
            @Query("name") String keyword
    );}
Call<FomCombine> call = apiInterface.getContact(key);
        call.enqueue(new Callback<FomCombine>() {
            @Override
            public void onResponse(Call<FomCombine> call, Response<FomCombine> response) {
                progressBar.setVisibility(View.GONE);
                contacts = response.body().getfom_combine();
                adapter = new Search_Adapter(contacts, Search_Activity.this);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<FomCombine> call, Throwable t) {
                progressBar.setVisibility(View.GONE);
                Toast.makeText(Search_Activity.this, "Error\n"+t.toString(), Toast.LENGTH_LONG).show();
            }
        }); 
 类似资料: