java - 预期为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $ android Retrofit gson 处为 STRING

标签 java android json gson retrofit

我正在使用改造进行开发,但我遇到了问题。我想从我的服务器获取结果。

这是我的 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);
    }
}

控制台给我以下错误:

Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

最佳答案

试试这个:

public class BureauCollection
{
   List<Bureau> bureauList;
}

Call<BureauCollection> getBureau();

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

关于java - 预期为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $ android Retrofit gson 处为 STRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40224966/

相关文章:

Android Fabric - 以自定义间隔发送捕获的异常

java - 在android中将字符串解析为json

android - 如何从上下文菜单获取有关 RecyclerView 项目的信息

json - Swift 4 Decodable 和换行符\n

java - 登录推特?

java - Maven:如果项目正在发布或未发布,则需要一种方法来更改属性或 URL 值

python - 在 Python 中处理嵌套的 JSON

json - 无法在云形成模板中测试 AWS DMS 终端节点

java - 如何实时远程调试更改

java - 在 Replacetoken ant 任务中使用 build.properties 的值