Android-Android开发:调用JSON数据出错
开发的项目在2.3 2.1的手机上可以调到JSON数据 到4.0的手机上无法获取数据
开发的版本是2.1的 最小2.1的
/**
* @author frankiewei. Json封装的工具类.
*/
public class JSONUtil {
private static String RootUrl = "http://app.wishgift.cn/";
private static String AppUrl = RootUrl
+ "?format=json";
private static final String TAG = "JSONUtil";
/**
* 获取json内容
*
* @param url
* @return JSONArray
* @throws JSONException
* @throws ConnectionException
*/
public static JSONObject getJSON(String url) throws JSONException,
Exception {
url = AppUrl+url;
return new JSONObject(getRequest(url));
}
/**
* 向api发送get请求,返回从后台取得的信息。
*
* @param url
* @return String
*/
protected static String getRequest(String url) throws Exception {
return getRequest(url, new DefaultHttpClient(new BasicHttpParams()));
}
/**
* 向api发送get请求,返回从后台取得的信息。
*
* @param url
* @param client
* @return String
*/
protected static String getRequest(String url, DefaultHttpClient client)
throws Exception {
String result = null;
int statusCode = 0;
HttpGet getMethod = new HttpGet(url);
Log.d(TAG, "do the getRequest,url=" + url + "");
try {
// getMethod.setHeader("User-Agent", USER_AGENT);
HttpResponse httpResponse = client.execute(getMethod);
// statusCode == 200 正常
statusCode = httpResponse.getStatusLine().getStatusCode();
Log.d(TAG, "statuscode = " + statusCode);
// 处理返回的httpResponse信息
result = retrieveInputStream(httpResponse.getEntity());
Log.d(TAG, "json = " + result);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
throw new Exception(e);
} finally {
getMethod.abort();
}
return result;
}
/**
* 处理httpResponse信息,返回String
*
* @param httpEntity
* @return String
*/
protected static String retrieveInputStream(HttpEntity httpEntity) {
int length = (int) httpEntity.getContentLength();
// the number of bytes of the content, or a negative number if unknown.
// If the content length is known but exceeds Long.MAX_VALUE, a negative
// number is returned.
// length==-1,下面这句报错,println needs a message
if (length < 0)
length = 10000;
StringBuffer stringBuffer = new StringBuffer(length);
try {
InputStreamReader inputStreamReader = new InputStreamReader(
httpEntity.getContent(), HTTP.UTF_8);
char buffer[] = new char[length];
int count;
while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) {
stringBuffer.append(buffer, 0, count);
}
} catch (UnsupportedEncodingException e) {
Log.e(TAG, e.getMessage());
} catch (IllegalStateException e) {
Log.e(TAG, e.getMessage());
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
return stringBuffer.toString();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们好像也遇到过这个问题。
4.0下的json库和以前的json库不同,应该是遇到了特殊字符导致解析出现问题。
可以先打印出来,再逐个排除下。
另外回收数据的代码建议用
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity, HTTP.UTF_8);
不需要自己处理InputStream了。