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个回答

通过发现,是自己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

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

Mr_li13
黯雅悸动 json格式不是在上面的吗?是数组类型的json,我的问题在上面的,就是在本机测试没问题,json数组用gson.form也能解析,但是放到远程linux服务器上就不能了,不知道为什么?
大约 3 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐