0

我正在尝试在必须通过的地方进行网络服务调用

login.php?message=[{"email":"mikeymike@mouse.com","password":"tiger"}]

我已经使用反斜杠来转义这样的双引号

String weblink = "login.php?message=[{\"email\":\"mikeymike@mouse.com\",\"password\":\"tiger\"}]";

但我仍然遇到错误。我尝试过调用其他不需要带有任何双引号的数据的 web 服务,它们工作正常,所以我很确定问题出在这个问题上。我也得到一个 java.lang 异常说

java.lang.Exception  Indicates a serious configuration error.DateParseException An exception to indicate an error parsing a date string.  DestroyFailedException Signals that the destroy() method failed         

编辑:我尝试使用 URLEncoder 和 JSON 对象,但仍然出现错误

这是其余的代码

String HOST = "http://62.285.107.329/disaster/webservices/";

 String weblink = "login.php?message=[{\"email\":\"mikeymike@mouse.com\",\"password\":\"tiger\"}]";
String result = callWebservice(weblink);

 public String callWebservice(String weblink) {
    String result = "";
    try {

        HttpParams httpParameters = new BasicHttpParams();
        int timeoutConnection = 7500;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        int timeoutSocket = 7500;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
        HttpClient client = new DefaultHttpClient(httpParameters);
        HttpGet request = new HttpGet();
        URI link = new URI(HOST + weblink);
        request.setURI(link);
        HttpResponse response = client.execute(request);

        BufferedReader rd = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent()));
        result = rd.readLine();

    } catch (Exception e1) {
        e1.printStackTrace();
        result = "timeout";
    }
    return result;
}

Web 服务还返回一个 JSON 对象,所以这也可能是错误的原因吗?

4

4 回答 4

5

与其手动尝试并得到错误,不如使用JSONObject类和 UrlEncoder 的组合。

 JSONObject json = new JSONObject();
 json.put("email","mikeymike@mouse.com" );
 json.put("password", "tiger");
 String s = "login.php?message=" + UrlEncoder.encode(json.toString());
于 2012-11-09T21:59:48.363 回答
0

向所有人道歉,但问题似乎是我试图以错误的方式使用 Web 服务,因为它返回一个 JSON 对象。

对于可能遇到此问题的任何人,正确的方法是在下面的代码中

String str="url";
try{
    URL url=new URL(str);
    URLConnection urlc=url.openConnection();
    BufferedReader bfr=new BufferedReader(new InputStreamReader(urlc.getInputStream()));
    String line;
    while((line=bfr.readLine())!=null)
    {
    JSONArray jsa=new JSONArray(line);
    for(int i=0;i<jsa.length();i++)
       {
       JSONObject jo=(JSONObject)jsa.get(i);
                    title=jo.getString("deal_title");  //tag name "deal_title",will return value that we save in title string
                des=jo.getString("deal_description");
   }
}
catch(Exeption e){
}

这个答案来自

如何通过android调用json webservice

于 2012-11-11T20:52:39.167 回答
0

您必须%22在以下位置使用"login.php?message=[{%22email%22:%22mikeymike@mouse.com%22,%22password%22:%22tiger%22}]

"不是 URL 中的有效字符。

更通用的解决方案是使用URLEncoder.encode("login.php?message=[{\"email\":\"mikeymike@mouse.com\",\"password\":\"tiger\"}]", "UTF8")

于 2012-11-09T21:58:52.327 回答
0

当您与 Web 服务通信时,您需要对数据进行URL 编码。在您的情况下,url 编码将替换"%22,但如果您要添加其他特殊字符,例如%,编码也会捕获这些。为此,JDK 中有一个 java 类,称为URLEncoder

因此,基本上,您要做的是使用 准备字符串URLEncoder.encode(),如下所示:

String weblink = URLEncoder.encode("login.php?message=[{\"email\":\"mikeymike@mouse.com\",\"password\":\"tiger\"}]");

现在字符串已编码,您应该能够将其发送到服务器并让它理解您的意思。

于 2012-11-09T22:05:06.140 回答