android http请求的未知主机异常应返回XML

时间:2012-09-06 06:55:37

标签: java android xml web-services http

我使用以下类发送http请求并在我的android项目中获取返回的XML响应。 但是在尝试发送请求时会抛出UnknownHostException。 请帮我解决这个问题。

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;    
import org.xml.sax.Locator;
import org.xml.sax.SAXException;

import android.os.AsyncTask;
import android.util.Xml;

class RequestTask extends AsyncTask<String, String, String>{

@Override
protected String doInBackground(String... uri) {
    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response;
    String responseString = null;
    try {
        response = httpclient.execute(new HttpGet(uri[0]));
        StatusLine statusLine = response.getStatusLine();
        if(statusLine.getStatusCode() == HttpStatus.SC_OK){
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.getEntity().writeTo(out);
            out.close();                
            responseString = out.toString();
        } else{
            //Closes the connection.
            response.getEntity().getContent().close();
            throw new IOException(statusLine.getReasonPhrase());
        }
    } catch (ClientProtocolException e) {
        //TODO Handle problems..
    } catch (IOException e) {
        String s=e.toString();
        System.out.println(s);
        //TODO Handle problems..
    }
    return responseString;
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    //Do anything with response..
    System.out.println(result);





}


}

1 个答案:

答案 0 :(得分:1)

确保您已在AnroidManifest文件中声明了INTERNET权限,并且已建立互联网连接。

您应该在AndroidManifest:

中声明此权限
<uses-permission android:name="android.permission.INTERNET" />