黯雅悸动 2017-05-08 06:12 采纳率: 100%
浏览 1980
已采纳

Expected a BEGIN_ARRAY but was STRING at line

android访问本机后台没问题。能够返回正常的数据,但是我把本机后台项目打包成war包放在
服务器上,然后用android去访问服务器,就会报如下错误:

 Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
                                                                                        at com.google.gson.Gson.fromJson(Gson.java:899)
                                                                                        at com.google.gson.Gson.fromJson(Gson.java:852)
                                                                                        at com.google.gson.Gson.fromJson(Gson.java:801)
                                                                                        at com.example.ldp.com.activity.StudentActivity.initFruits(StudentActivity.java:107)
                                                                                        at com.example.ldp.com.activity.StudentActivity.onCreate(StudentActivity.java:51)
                                                                                        at android.app.Activity.performCreate(Activity.java:5231)
                                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)

访问代码:

    private void initFruits(){
        Map<String,String> map = new HashMap<>();
        map.put("username",username);
        String str = HttpGetUtil.SendPostHttp("showcourse/toshowcourse.action",map);
        Log.i("LDP",str);
        Gson gson = new Gson();
        coursesList = gson.fromJson(str,new TypeToken<List<Course>>(){}.getType());
        if(coursesList.size()==0){
            Toast.makeText(StudentActivity.this,"cuowu",Toast.LENGTH_SHORT).show();
        }
    }

后台返回的json数据格式:

图片说明

  • 写回答

3条回答 默认 最新

  • 黯雅悸动 2017-05-11 11:18
    关注

    通过发现,是自己SQL语句有问题,因为在win上MySql是不分大小写的,而在Linux上是分大小写的,把这个改一下,就成功访问了,不是Gson的问题:
    除了使用上面这种方式解析json数组的方式:

     coursesList = gson.fromJson(str,new TypeToken<List<Course>>(){}.getType());
    

    还有这种方式,给大家借鉴一下:

     //Json的解析类对象
            //将JSON的String 转成一个JsonArray对象
            JsonParser jsonParser = new JsonParser();
            JsonArray jsonArray = jsonParser.parse(str).getAsJsonArray();
            Gson gson = new Gson();
    
            //加强for循环遍历JsonArray
            for (JsonElement user : jsonArray) {
                //使用GSON,直接转成Bean对象
                Course userBean = gson.fromJson(user, Course.class);
                coursesList.add(userBean);
            }
    

    参考资料:http://www.open-open.com/lib/view/open1472632967912.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵