2011-11-14 47 views
1

我读到HttpsURLConnection在2.3之前是buggy,我有第一次体验它是越野车。Android HttpsURLConnection vs HttpClient,都给出了问题

,我试图交替是HttpClient的,但它给我的问题,在某种意义上说,它返回我:

<?xml version="1.0" encoding="iso-8859-1"?> 

时,我清楚应该找回JSON。

HttpsURLConnection可以很好地返回JSON,但在处理很多请求时会产生一些不一致的结果。 (通过返回JSON,我的意思是响应应该包含JSON)

任何想法为什么HttpClient回馈一些XML标记而不是JSON(应该返回什么)?

编辑 - CODE

HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost(url); 

    List<NameValuePair> urlParams = new ArrayList<NameValuePair>(); 
     urlParams.add(new BasicNameValuePair("&platform=","Android")); 
     urlParams.add(new BasicNameValuePair("&action=","signin")); 
     urlParams.add(new BasicNameValuePair("&user",username)); 
     urlParams.add(new BasicNameValuePair("&pass",password)); 



    try { 

     post.setEntity(new UrlEncodedFormEntity(urlParams, HTTP.UTF_8)); 
     HttpResponse resp = client.execute(post); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(
       resp.getEntity().getContent())); 

     String line = ""; 
     JSONArray ja = new JSONArray(); 
     while ((line = rd.readLine()) != null) { 
      Log.i("------>", line); 
      ja = new JSONArray(line); //breaks here because it returns xml instead of JSON 

     } 
     rd.close(); 
     return ja; 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 

是否有这两个更好交替?

+1

我们需要一些代码编写。 –

+0

我不知道它的问题,但该网站是https,而不是http – volk

+0

首先告诉我它是.net服务或PHP? –

回答

1

这看起来像来自服务器的错误页面的响应。您可能会收到404错误或许多其他http错误。这只是您从服务器获取的html文件的开始。你确定这个网址是一个有效的网址,并且会接受来自手机的连接而不重定向吗?

+0

是的,这个问题,它使用HttpsURLConnection完全正常,并且只有它返回的那一行。就是那个xml位。 – volk

+0

你可以发布你的电话代码吗? – Bobbake4

+0

更新代码 – volk

0

相反的:

List<NameValuePair> urlParams = new ArrayList<NameValuePair>(); 
     urlParams.add(new BasicNameValuePair("&platform=","Android")); 
     urlParams.add(new BasicNameValuePair("&action=","signin")); 
     urlParams.add(new BasicNameValuePair("&user",username)); 
     urlParams.add(new BasicNameValuePair("&pass",password)); 

试试这个:

List<NameValuePair> urlParams = new ArrayList<NameValuePair>(); 
     urlParams.add(new BasicNameValuePair("platform","Android")); 
     urlParams.add(new BasicNameValuePair("action","signin")); 
     urlParams.add(new BasicNameValuePair("user",username)); 
     urlParams.add(new BasicNameValuePair("pass",password)); 

更新1:

究竟是你想实现在此:

String line = ""; 
     JSONArray ja = new JSONArray(); 
     while ((line = rd.readLine()) != null) { 
      Log.i("------>", line); 
      ja = new JSONArray(line); //breaks here because it returns xml instead of JSON 

     } 

这明显给错误,因为您尝试从XML响应字符串创建JSONArray,intsead检查此功能并实施它。

+0

不幸的是,没有工作:( – volk

+0

@lazeR任何回应?显示logcat输出或响应,最好是确定一下。 –

+0

响应只有一行:<?xml version =“1.0”encoding =“iso-8859-1”?>并且错误为nullpointerexceptions,因为JSON数组由于XML不是JSON格式而生成 – volk

1

您应该从BasicNameValuePair key中删除"&"字符。

BasicNameValuePair autometically附加在每个参数"&"所以没有必要添加"&"字符

你有如下

urlParams.add(new BasicNameValuePair("platform","Android"));