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

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 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败