读取一个从PHP回显到java的字符串?

时间:2011-05-11 02:55:42

标签: java php android string json

我正在尝试使用以下代码从通过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());}

}

2 个答案:

答案 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);