【问题标题】:Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $ android retrofit gson预期 BEGIN_ARRAY 但在第 1 行第 1 列路径为 STRING $ android retrofit gson
【发布时间】:2016-10-24 18:22:15
【问题描述】:

我正在开发改造,但我有一个问题。我想从我的服务器获取结果。

这是来自我的脚本 php 的结果 json:

[{"rubrique_id":"1","rubrique_lib":"syst\u00e8me "},
 {"rubrique_id":"2","rubrique_lib":"s\u00e9curit\u00e9"},
 {"rubrique_id":"3","rubrique_lib":"information"}]

这是我在 java 中的模型类:

public class Bureau {

    @SerializedName("rubrique_id")
    private String rubrique_id;

    @SerializedName("rubrique_lib")
    private String rubrique_lib;

    public String getRubrique_id() {
        return rubrique_id;
    }

    public void setRubrique_id(String rubrique_id) {
        this.rubrique_id = rubrique_id;
    }

    public String getRubrique_lib() {
        return rubrique_lib;
    }

    public void setRubrique_lib(String rubrique_lib) {
        this.rubrique_lib = rubrique_lib;
    }


}

这是我的 API 类:

public interface BureauApi {

    @GET("/")
    Call<List<Bureau>> getBureau();
}

这是我实现改造库的主类:

public class ParametreActivity extends AppCompatActivity {
    private Spinner spinner = null;
    private static final String BASE_URL = "http://192.168.56.1:80/posteboosterAPI/methodes.php/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_parametre);
        spinner = (Spinner)findViewById(R.id.list_bureau);
        final List<String> listBureau = new ArrayList<String>();
        listBureau.add("bureau1");
        listBureau.add("bureau2");

        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        Retrofit retrofit = new Retrofit.Builder()
                             .baseUrl(BASE_URL)
                             .addConverterFactory(GsonConverterFactory.create(gson))
                             .build();
        BureauApi  service = retrofit.create(BureauApi.class);

        Call<List<Bureau>> call = service.getBureau();
         call.enqueue(new Callback<List<Bureau>>() {
             @Override
             public void onResponse(Call<List<Bureau>> call, Response<List<Bureau>> response) {

                 if (response.isSuccessful()) {

                     for (Bureau bureaus :response.body()
                             ) {
                         Log.i("log", bureaus.getRubrique_lib());
                     }
                 }else {

                     Log.i("log", "l'objet est vide "+response.message());
                 }
             }

             @Override
             public void onFailure(Call<List<Bureau>> call, Throwable t) {
                 Log.i("log","erreur survenu dans la requete "+ t.getMessage());

             }
         });
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,listBureau);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }
}

控制台给了我以下错误:

应为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $ 处为 STRING

【问题讨论】:

    标签: java android json gson retrofit


    【解决方案1】:

    试试这个:

    public class BureauCollection
    {
       List<Bureau> bureauList;
    }
    

    Call<BureauCollection> getBureau();
    

    更改基本 URL:“http://192.168.56.1:80/” 并在 API 中:@GET("/posteboosterAPI/methodes.php")

    【讨论】:

    • 我已经尝试过了,但我将“预期开始对象但为字符串”作为错误。谢谢您
    • @Rushi M Thakker 当我应用你的例子时,我有这个错误:
    • Java.lang.illegalstateexception:预期为 begin_object 但为 begin_array
    • 好的。那你到底做了什么?您能否发布代码更新或回答您自己的问题? @JoelAkoupo
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多