我正在尝试使用以下代码从通过PHP回显的服务器检索响应。字符串比较方法compareTo()和(...)。equals(..)在执行此代码时不能正常工作。我尝试了各种各样的选项,我确信尽管似乎将响应转换为字符串格式,但“responseText”没有典型的字符串属性。如果我有3个字符串文字语句,其中一个是从findUser.php回显的。如何以一种允许我确定字符串内容的方式将其读入java中,因为我正在尝试这样做?我已经找到了很多关于需要创建BufferedReader对象的讨论,但我不明白如何实现它。如果有人愿意为我制定步骤,我将非常感激。
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(".../findUser.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
final String responseText = EntityUtils.toString(response.getEntity());
if(responseText.compareTo("Not Registered") == 0 || responseText.compareTo("Error") == 0) {
Log.i("KYLE","TRUE");
// DISPLAY ERROR MESSAGE
TextView loginError = (TextView)findViewById(R.id.loginErrorMsg);
loginError.setVisibility(View.VISIBLE);
loginError.setText(responseText);
}
else {
GlobalVars.username = userEmail;
Login.this.finish();
Intent intent = new Intent(Login.this,Purchase.class);
startActivity(intent);
}
catch(Exception e) {Log.e("log_tag", "Error in http connection"+e.toString());}
}
答案 0 :(得分:1)
如果您的responseText
日志消息看起来正确但比较方法返回false,那么您可能会遇到字符集问题。在很多情况下,出现在不同字符集的不同代码点的字符似乎相同。
EntityUtils.toString()的文档指出,当没有指定字符集时,它会尝试分析实体或者只是回退到ISO-8859-1。
UTF-8通常是一种安全的默认使用方式。尝试将其添加到PHP脚本的顶部:
<?php
header('Content-Type: text/plain; charset=utf-8');
?>
EntityUtils应该选择它,如果不是,你可以将“utf-8”传递给toString()方法以强制它使用相同的字符集。
答案 1 :(得分:0)
以下是从响应中读取数据的更多方法。
InputStream inputStream = response.getEntity().getContent();
(方法1)使用缓冲读取器一次读取一行数据
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String readData = "";
String line = "";
while((line = br.readLine()) != null){
readData += line;
}
(方法2)一次读取一个字节的数据,然后转换为字符串
byte[] buffer = new byte[10000]; //adjust size depending on how much data you are expecting
int readBytes = inputStream.read(buffer);
String dataReceived = new String(buffer, 0, readBytes);