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

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 郁闷的中交兵 2017-05-09 15:11

    Course里面的c_id和cname对吗?gsonfomat来创建bean类好一些。

    评论
    解决 无用
    打赏 举报
  • 郁闷的中交兵 2017-05-09 15:12

    少侠你打印一下获取的json格式对不对啊,这个格式处理也是必须的啊

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题