android 获取网页数据,Android 中访问网页数据/内容
别忘了权限:代码:public class WebClient {private String mAddress = "";private String mParams = "";public WebClient(String address){mAddress = address;}public void addParam(String name, String value){if (!mPar
别忘了权限:
代码:
public class WebClient {
private String mAddress = "";
private String mParams = "";
public WebClient(String address)
{
mAddress = address;
}
public void addParam(String name, String value)
{
if (!mParams.equals(""))
{
mParams += "&";
}
try {
mParams += name + "=" + URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public WebClientResult post() {
WebClientResult result = new WebClientResult();
try {
URL url = new URL(mAddress);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//conn.setConnectTimeout(3000);
//conn.setDoOutput(true);
//conn.setDoInput(true);
//conn.setUseCaches(false);
conn.setRequestMethod("POST");
byte[] data = mParams.getBytes("utf-8");
//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
OutputStream outputStream = conn.getOutputStream();
outputStream.write(data);
int status = conn.getResponseCode();
result.setStatus(status);
if (status == 200) {
result.setHtml(StreamHelper.toString(conn.getInputStream(), true));
} else {
result.setHtml(StreamHelper.toString(conn.getErrorStream(), true));
}
outputStream.close();
conn.disconnect();
}
catch (IOException e)
{
result.setStatus(-1);
result.setHtml("WebClient error.");
e.printStackTrace();
}
return result;
}
}
public class WebClientResult
{
private int mStatus = 0;
private String mHtml = "";
public int getStatus() {
return mStatus;
}
public String getHtml(){
return mHtml;
}
public void setStatus(int status) {
this.mStatus = status;
}
public void setHtml(String html) {
this.mHtml = html;
}
}
如上代码,OutputStream 负责要上传的内容,InputStream 负责获取的内容。注意使用 getInputStream() 要求 status 为 200,否则会报 FileNotFoundException。
代码就这些,不过直接在主线程中访问是不行的,因为访问网络是耗时的操作,Android 为了防止界面卡,从 4.0 开始,就不允许在主线程中访问网络,所以我们得用线程。
同时,当我们用了线程,试图将获取的 HTML 更新在某个控件上时,会出错,因为 Android 又不允许在线程中更新界面,解决办法是用 Handler。
更多推荐
所有评论(0)