[英]Convert an inputstream to a string value in Java Android App
I'm having trouble with function(s) I'm writing. 我正在编写函数时遇到问题。 I'm trying to convert an inputstream to a string value.
我正在尝试将输入流转换为字符串值。 I've written two functions and I'm attempting to extract the String value but my Log.e response is returning NULL.
我写了两个函数,我试图提取String值,但我的Log.e响应返回NULL。 Below is my syntax.
以下是我的语法。 What am I doing wrong?
我究竟做错了什么? Thanks
谢谢
public JSONArray GetCityDetails(String StateID) {
@SuppressWarnings("deprecation")
String url = "http://mywebsite.com/getCity.php?StateID="+URLEncoder.encode(StateID);
HttpEntity httpEntity = null;
try{
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
httpEntity = httpResponse.getEntity();
} catch(ClientProtocolException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
JSONArray jsonArray = null;
if(httpEntity !=null){
try{
InputStream entityResponse = httpEntity.getContent();
// not working
String entityResponseAfterFunctionCall2 = readFully(entityResponse);
// not working
String entityResponseAfterFunctionCall3 = letsDoThisAgain(entityResponse);
Log.e("Entity Response Dude: ", entityResponseAfterFunctionCall3);
jsonArray = new JSONArray(entityResponseAfterFunctionCall3);
} catch(JSONException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
return jsonArray;
}
public String readFully(InputStream entityResponse) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = 0;
while ((length = entityResponse.read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
return baos.toString();
}
public String letsDoThisAgain(InputStream entityResponse){
InputStreamReader is = new InputStreamReader(entityResponse);
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(is);
try {
String read = br.readLine();
while(read !=null){
sb.append(read);
read = br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
if(inputStream != null)
{
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
String line;
try {
br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
else
{
return "";
}
Your readFully
call will use your system's default character encoding to transform byte buffer into String. readFully
调用将使用系统的默认字符编码将字节缓冲区转换为String。 This is NOT what you want to happen. 这不是你想要发生的事情。
You should use explicit character set in toString
call. 您应该在
toString
调用中使用显式字符集。 The encoding is usually specified in the HTTP request header. 编码通常在HTTP请求标头中指定。
Here is an example of how to convert a UTF-8
encoded string 以下是如何转换
UTF-8
编码字符串的示例
return baos.toString( "UTF-8" );
Your second problem, is once you've consumed the InputString in readFully
call, the letsDoThisAgain
will not have anything to read, because the InputStream will be at the EOF. 你的第二个问题是,一旦你在
readFully
调用中消耗了InputString, letsDoThisAgain
将没有任何东西可以读取,因为InputStream将处于EOF。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.