您的位置:首页 > 编程语言

获取某个网页的源代码显示在手机界面上

2015-06-10 19:57 357 查看
* 需求 : 

根据网址获取网页的源代码

 思路 : 

与前面的网络图片查看器相似.

进行网络访问,连接服务器获取网页源码的操作,只能放在子线程中进行了。而获取控件进行界面修改的操作只能放在主线程中了。

所以,必须将获得的源码从子线程中传到主线程中去,这就要用到了Handler机制了。

 * 注意 : 网页上的源码是用的什么编码集,对应的也要用相应的编码集,否则会出现乱码.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

需求 :

* 首先,定义个方法 getYuanMaFromNet ,专门用来进行访问网络,获得源码的操作.

步骤 :

* 1,将网页的地址变成个URL对象。

* 2,通过该URL对象得到个HttpURLConnection连接对象。

* 3,给该连接对象设置好请求方式,连接超时的时间,以及读取内容超时的时间,然后开始连接服务器。

* 4,获得该链接的返回码。

* 5,如果该返回码为200,则表示连接服务器成功,那么就获取该连接的输入流。

* 6,从输入流中提取出网页的源代码.

代码 :

//自定义个方法用来获取网页源码
public String getYuanMaFromNet(String url)
{
try {
<span style="white-space:pre">	</span>//1,将网页的地址变成个URL对象。
URL u = new URL(url);
//2,通过该URL对象得到个HttpURLConnection连接对象。
HttpURLConnection conn = (HttpURLConnection)u.openConnection();
//3,给该连接对象设置好请求方式,连接超时的时间,以及读取内容超时的时间,然后开始连接服务器。
conn.setRequestMethod("GET");//必须大写
conn.setConnectTimeout(5000);//设置连接的超时时间为5s
conn.setReadTimeout(5000);//设置读取的超时时间为5s
conn.connect();//开始连接服务器
//4,获得该连接的返回码
int responseCode = conn.getResponseCode();
if(responseCode == 200)//5,如果返回码为200,则表示连接成功,可以开始获取该链接的输入流
{
InputStream is = conn.getInputStream();
//6,从输入流中提取出网页的源代码.
BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
StringBuffer sb = new StringBuffer();
String text = null;
while((text = br.readLine()) != null)
{
sb.append(text+"/r/n");
}
String yuanMa = sb.toString();
br.close();
//将获得的源码返回
return yuanMa;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

需求 :

将获得的源码显示在手机界面上

思路 : 
*  A,准备好布局文件和权限的添加.

 *  B,在主线程中获取需要的控件,

 *  C,
然后开启一个子线程,在子线程中进行访问网络,获取网页源码的操作.

 *  D,在主线程中定义个Handler,并重写handleMessage方法

 *  E,在子线程中将获取到的网页源码用Handler发送到主线程中去.

 *  F,在主线程中将网页源码显示在界面上.

代码 :

public class MainActivity extends Activity {
private EditText editText;
private TextView textView;
//D,在主线程中定义个Handler,并重写handleMessage方法,获取子线程发来的网页源码
private Handler handler = new Handler(){

public void handleMessage(Message msg) {
//获取子线程发来的网页源码
String yuanMa = (String)msg.obj;
//	F,在主线程中将网页源码显示在界面上,修改界面的操作只能在主线程中进行
textView.setText(yuanMa);
}

};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//B,在主线程中获取需要的控件,
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.textView);
}

public void onClick(View v)
{
//C,	然后开启一个子线程,在子线程中进行访问网络,获取网页源码的操作.
final String url = editText.getText().toString();
new Thread(new Runnable() {

public void run() {
//获取返回的网页源码
String yuanMa = getYuanMaFromNet(url);
//E,在子线程中将获取到的网页源码用Handler发送到主线程中去.
Message msg = new Message();
msg.obj = yuanMa;
handler.sendMessage(msg);
}
}).start();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: