public static String getXMLString(String url) {
        HttpClient hc = new DefaultHttpClient();
        HttpConnectionParams.setConnectionTimeout(hc.getParams(), 4000);
//        HttpConnectionParams.setSoTimeout(hc.getParams(), 4000);
        HttpGet request = new HttpGet(url);
            HttpResponse response;
            try {
                response = hc.execute(request);
                HttpEntity entity = response.getEntity();
                if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    return EntityUtils.toString(entity,HTTP.UTF_8);
                } else {
                    return null;
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
    }

解决方案 »

  1.   

    public class WebServices {
    public JSONObject RequestUrl(String url) {
        JSONObject jsonResponse = null;
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            Log.v("URL request", "--->" + url);
            URI uri = new URI(url);
            HttpGet httpget = new HttpGet(uri);
            httpget.setHeader("Accept", "application/json");
            httpget.setHeader("Content-type", "application/json; charset=utf-8");
            HttpResponse response = httpClient.execute(httpget);
            HttpEntity responseEntity = response.getEntity();
            String changeTIDRec = EntityUtils.toString(responseEntity);
            System.out.println(changeTIDRec);
            jsonResponse = new JSONObject(changeTIDRec);
            Log.v("WebService", "Response : " + jsonResponse);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonResponse;
    }}
      

  2.   

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new AsyncTask<Void,Void,Void>() {    @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            JSONObject jObject = getJSONfromURL("http://mascwt.oicp.net:7080/Monitoring/Data/getOrgData/");
            return null;
        }
    }.execute();
    }
      public JSONObject getJSONfromURL(String url) {// 初始化
    InputStream is = null;
    String result = "";
    JSONObject jArray = null;// http post
    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();} catch (Exception e) {
        Log.e("log_tag", "Error in http connection " + e.toString());
    }// 转换response到string
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
    }// 解析string到JSON对象
    try {
        jArray = new JSONObject(result);
    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data " + e.toString());
    }return jArray;
      

  3.   

    就我上面给的例子,你在android机器上访问一下。我在模拟器访问是正常的,手机就不行,也不是说不行,就是偶尔能成功。
      

  4.   

    你的代码我看了。我想问下你这些代码经过手机实测了吗?我自己写的代码在模拟器运行成功,在手机上运行偶尔成功,经常会出现SocketException:Connection reset by peer.
      

  5.   

    返回的该是json格式的数据为什么你这个url,复制到浏览器窗口,直接下载下来个文件啊。
      

  6.   

    是什么方式获取的。。get还是post
      

  7.   

    QQ1084366249.。。有问题加我qq交流
      

  8.   

    第一层,WebClientpublic class WebClient{
    //...
    public WebClient() {
    Log.v(TAG, "初始化");
    timeout = 5 * 1000;
    bufferSize = 8192;
    encode = "UTF-8";
    httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
    HttpConnectionParams.setSoTimeout(httpParams, timeout);
    HttpConnectionParams.setSocketBufferSize(httpParams, bufferSize);
    HttpClientParams.setRedirecting(httpParams, true);
    httpClient = new DefaultHttpClient(httpParams);
    } public String doGet(String url) throws Exception {
    return doGet(url, null);
    } public String doGet(String url, Map<String, String> params)
    throws Exception {
    // 添加QueryString
    String paramStr = "";
    if (params != null) {
    Iterator<Entry<String, String>> iter = params.entrySet().iterator();
    while (iter.hasNext()) {
    Entry<String, String> entry = (Entry<String, String>) iter
    .next();
    paramStr += "&" + entry.getKey() + "="
    + URLEncoder.encode(entry.getValue(), encode);
    }
    if (paramStr.length() > 0)
    paramStr.replaceFirst("&", "?");
    url += paramStr;
    }
    // 创建HttpGet对象
    HttpGet get = new HttpGet(url);
    Log.i("doGet " + "URL ", url);
    try {
    String strResp = "";
    // 发起请求
    HttpResponse resp = httpClient.execute(get);
    if (resp.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK)
    strResp = EntityUtils.toString(resp.getEntity());
    else
    // 如果返回的StatusCode不是OK则抛异常
    throw new Exception("Error Response:"
    + resp.getStatusLine().toString());
    Log.i("doGet Response ", strResp);
    return strResp;
    } finally {
    get.abort();
    }
    }
    //...
    }
    第二层, Servicespublic class MyServices extends Service {
    private static final String TAG = "MyServices"; private WebClient client; @Override
    public void onCreate() {
    Log.v(TAG, "onCreate");
    this.client = new WebClient();
    } @Override
    public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    Log.v(TAG, "onBind");
    return null;
    } @Override
    public void onStart(Intent intent, int startId) {
    Log.v(TAG, "onStart"); if (intent != null) {
    final Bundle bundle = intent.getExtras();
    if (bundle != null) { int flag = bundle.getInt("flag");
    switch (flag) {
    case 999:{
    new Thread() {
    @Override
    public void run() {
    Log.v(TAG + "onStart", "mascwt");
    mascwt();
    }
    }.start();
    break;
    }
    default:
    Log.w(TAG + "onStart", "为匹配的case");
    } }
    } } @Override
    public void onDestroy() {
    super.onDestroy();
    Log.v(TAG, "onDestroy");
    } public void mascwt(){
    String str = "";
    try {
    str = client.doGet("http://mascwt.oicp.net:7080/Monitoring/Data/getOrgData/");
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Intent broadIntent = new Intent();
    broadIntent.setAction("com.ytu.enetmobile.servicesBroadcast");
    Bundle bundle = new Bundle();
    bundle.putString("mascwt", str);
    bundle.putInt("flag", 999);
    broadIntent.putExtras(bundle);
    sendBroadcast(broadIntent);
    }
    }第三层, UIpublic class ConnectionTestActivity extends Activity {
    //...
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_connectiontest); tv_1 = (TextView) this.findViewById(R.id.tv_1); receiver = new DataReceiver();
    } @Override
    public void onStart() {
    super.onStart();
    if (null == receiver) {
    receiver = new DataReceiver();
    }
    IntentFilter filter = new IntentFilter();// 创建IntentFilter对象
    filter.addAction("com.ytu.enetmobile.servicesBroadcast");
    this.registerReceiver(receiver, filter);
    } public void onClick(View view) {
    switch (view.getId()) {
    case R.id.button2: {
    Intent intent = new Intent(
    "com.ytu.enetmobile.services.enetservices");
    Bundle bundle = new Bundle();
    bundle.putInt("flag", 999);
    intent.putExtras(bundle); startService(intent);
    break;
    }
    } } class DataReceiver extends BroadcastReceiver {
    public static final String TAG = "DataReceiver"; @Override
    public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    switch (bundle.getInt("flag")) {
    case 999: {
    String str = intent.getStringExtra("mascwt");
    tv_1.setText(str);
    break;
    }
    default:
    Log.v(TAG + "onReceive", "未匹配的case");
    break; }
    }
    }
    }
    运行结果测试结果:
    真机测试OK.
    有乱码, 推测为编码问题.
      

  9.   

    看你这贴在这好几天了......碰巧我做过, 就拿你给的URL调了一下, 除了编码格式不对, 没有什么大问题.另外上面的代码可能不全, 若有问题再讨论
      

  10.   

    "application/json"
    之前服务器端用的这个编码,因为我手机上运行时经常要请求7-8次才能成功,所以我才在这贴这个帖子。
    后来和服务器那边的交流了一下,估计是服务器那边的配置问题。
    其实大家的请求过程我都明白,我也能请求成功,编码也没问题,也能解析出来,就是想问问为什么会时常出现
    SocketException:Connection reset by peer. 
    这个问题再我另外一个帖子上贴出来了,其中有我请求数据的源码。和大家一样的。
      

  11.   

    非常感谢。代码我都看了一遍,基本思路是一样的,你的结果却是也是编码问题产生的。
    其实我的疑问是客户端和服务器HTTP头参数配置。模拟器数据能请求成功,证明上层代码都是对的。因为我的代码都是其他工程拿过来的。而把程序放到手机上运行就经常会出现SocketException:Connection reset by peer. 我看了很多关于这个错误的原理。
    其实报错在:HttpResponse resp = httpClient.execute(get); 所以我想问的就是这个get参数配置的影响,为什么模拟器和电脑浏览器能访问,而手机访问就会出错?我运行的时候是经常出错,所以我采用连续请求的方式,最后也能请求到数据。问下,你在手机运行的过程中就没有报过这个错??
      

  12.   

    别用EntityUtils.toString方法~这个方法有长度的限制的,转换方法最好自己实现
      

  13.   

    我服务器端是WCF的, 在2.3和4.0的手机和虚拟机都测试过, 没有发生像你这样的错误。方便的话代码贴出来给看看
      

  14.   


    http://bbs.csdn.net/topics/390253540
    上面这个地址是我关于同一个问题的另一个帖子。回复里面有我的两段源码。你可以看看。服务器是.Net MVC,具体细节我并不清楚。只有那个url地址。