来自Web服务的意外响应

时间:2015-12-10 15:33:13

标签: android json coldfusion

我没有第一次使用Android中的Web服务,但是使用其中一个Web服务,我遇到了一个非常奇怪的问题。

实际上,有一个数组在jSon中返回以响应Web服务。如果在任何情况下,该数组包含5个或更少的记录,我会按预期获得响应字符串(包含所有jSon)。如果数组包含5条以上的记录,我开始从服务器获取响应字符串中的空字符串。

在所有情况下,同样的Web服务在Poster,Postman和Hurl.it上运行正常,即使阵列中有20个或更多记录。 (所以,这似乎不是服务器方面的问题)

我在同一个Android应用程序中实现了其他几个API,其他所有API都可以正常工作。只有此API显示意外行为。

下面我将粘贴此Web服务中涉及的Android端代码和服务器端代码(CF)。

服务器端代码是

<cffunction name="GetSuperAdmins" access="remote" returnType="struct" returnFormat="JSON">
  <cfargument name="ALID" type="string">
<cfif isdefined("url.alid")>
    <cfset alid = url.alid>
</cfif>
<cfif ALID eq '2'>
    <cfquery name="Super_Admins" datasource="#request.dsn#">
            SELECT userID,firstName,lastName
            FROM tUsers
            WHERE ALID = 2
            ORDER BY firstName ASC
     </cfquery>
     <cfquery name="distList" datasource="#request.dsn#">
            SELECT user_ids FROM tDistribution_users LIMIT 1
     </cfquery>
     <cfset user_ids =  distList.user_ids>
     <cfset result1 = {}>
     <cfset result1["success"] = "true">
     <cfset result1["SUPERADMINS"] = []>
     <cfloop query="Super_Admins">
            <cfset testObj = {}>
            <cfset dist = ListFind(user_ids, Super_Admins.userID)? 1:0>
            <cfset testObj["DISTRIBUTIONLISTED"] = "#dist#">
            <cfset testObj["FIRSTNAME"] = "#Super_Admins.firstName#">
            <cfset testObj["LASTNAME"] = "#Super_Admins.lastName#">
            <cfset testObj["USERID"] = "#Super_Admins.userID#">
            <cfset arrayAppend(result1["SUPERADMINS"], testObj)>
     </cfloop>

     <cfset result = result1>

<cfelse>
    <cfset msg = "Sorry! the given parameter is incorrect">
    <cfset result = '{"Success'&'":"false","msg'&'":"'&#msg#&'"}'>    
</cfif>
<cfreturn result>

获取响应的Android代码

public String postData(String val) throws IOException, IOException {
        String responseString;
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("My_URL");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("alid","2"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpclient.execute(httppost);
        StatusLine statusLine = response.getStatusLine();
        if(statusLine.getStatusCode() == HttpStatus.SC_OK){
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.getEntity().writeTo(out);
            out.close();
            responseString = out.toString();
        } else{
            response.getEntity().getContent().close();
            throw new IOException(statusLine.getReasonPhrase());
        }
        return responseString; 
    }

2 个答案:

答案 0 :(得分:0)

你对这部分表达的期望是什么?

&#msg#&

删除变量周围的#...

在任何情况下,您都会在声明中滥用&

答案 1 :(得分:0)

我已经解决了这个问题,因为我坚持了下来。 只需在httpPost请求之后写下这行代码

httppost.addHeader("Accept-Encoding", "text/plain");

欢迎并感谢所有回答我问题的伙伴们。