我没有第一次使用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;
}
答案 0 :(得分:0)
你对这部分表达的期望是什么?
&#msg#&
删除变量周围的#...
在任何情况下,您都会在声明中滥用&
。
答案 1 :(得分:0)
我已经解决了这个问题,因为我坚持了下来。 只需在httpPost请求之后写下这行代码
httppost.addHeader("Accept-Encoding", "text/plain");
欢迎并感谢所有回答我问题的伙伴们。