欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

程序员文章站 2023-11-04 14:19:34
 首先实现简单布局: 复制代码 代码如下:
Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络 
首先实现简单布局:
复制代码 代码如下:

<edittext
android:id="@+id/et_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentleft="true"
android:layout_alignparentright="true"
android:layout_alignparenttop="true"
android:ems="10"
android:text="@string/url_text" >
<requestfocus android:layout_width="match_parent" />
</edittext>
<button
android:id="@+id/btn_ie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentleft="true"
android:layout_below="@+id/et_url"
android:onclick="sendhttp"
android:text="@string/btn_text" />
<scrollview
android:id="@+id/sv_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btn_ie" >
<textview
android:id="@+id/tv_ie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ie_text" />
</scrollview>

在stirng中
复制代码 代码如下:

<string name="url_text">http://luochuang.iteye.com/blog/1606231</string>
<string name="btn_text">浏览</string>
<string name="ie_text">显示浏览网页内容</string>

新建类文件 :
Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络 
首先mainactivity 中代码 :
复制代码 代码如下:

public class mainactivity extends activity {
// 声明控件
public edittext et_url;
public textview tv_ie;
// 网路操作类
public networkutils networkutils;
private handler handler;
public string content;
public static final int text = 1;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
// 获取et_url对象
et_url = (edittext) findviewbyid(r.id.et_url);
tv_ie = (textview) findviewbyid(r.id.tv_ie);
// 实例化
networkutils = new networkutils(this);
// 实例化这个处理者
handler = new handler() {
public void handlemessage(message msg) {
super.handlemessage(msg);
switch (msg.what) {
case text:
tv_ie.settext(content);// 设置显示的文本
break;
default:
break;
}
}
};
}
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.main, menu);
return true;
}
public void sendhttp(view v) {
// 设置网络
boolean flag = networkutils.setactivenetwork();
if (flag) {
// run方法 执行完毕 这个线程就消耗了
// 子线程
new thread(new runnable() {
@override
public void run() {
send();
handler.sendemptymessage(text);
}
}).start();
}
}
// 发送请求操作
@suppresslint("newapi")
public void send() {

// 获取url的path路径
string path = et_url.gettext().tostring();
if (path.isempty()) {
toast.maketext(mainactivity.this, "访问 的url地址不能为空",
toast.length_long).show();
} else {
content = httputils.sendget(path);
}



/*// 设置网络
networkutils.setactivenetwork();
// 获取url的path路径
string path = et_url.gettext().tostring();
if (path.isempty()) {
toast.maketext(mainactivity.this, "访问 的url地址不能为空",
toast.length_long).show();
} else {
try {
// 设置访问的url
url url = new url(path);
// 打开请求
httpurlconnection httpurlconnection = (httpurlconnection) url
.openconnection();
// 设置请求的信息
httpurlconnection.setrequestmethod("get");
// 判断服务器是否响应成功
if (httpurlconnection.getresponsecode() == 200) {
// 获取响应的输入流对象
inputstream is = httpurlconnection.getinputstream();
// 字节输出流
bytearrayoutputstream bops = new bytearrayoutputstream();
// 读取数据的缓存区
byte buffer[] = new byte[1024];
// 读取长度记录
int len = 0;
// 循环读取
while ((len = is.read(buffer)) != -1) {
bops.write(buffer, 0, len);
}
// 把读取的内容转换成byte数组
byte data[] = bops.tobytearray();
// 把转换成字符串
content = new string(data);
} else {
toast.maketext(mainactivity.this, "服务器响应错误",
toast.length_long).show();
}
} catch (malformedurlexception e) {
e.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
}
}*/
}
}

复制代码 代码如下:

public class httputils {


public static string sendget(string path) {
string content = null;
try {
// 设置访问url
url url = new url(path);
// 打开请求
httpurlconnection httpurlconnection = (httpurlconnection) url
.openconnection();
// 设置请求的信息
httpurlconnection.setrequestmethod("get");
// 设置请求是否超时时间
httpurlconnection.setconnecttimeout(5000);
// 判断服务器是否响应成功
if (httpurlconnection.getresponsecode() == 200) {
// 获取响应的输入流对象
inputstream is = httpurlconnection.getinputstream();
byte data[] = streamtools.istodata(is);
// 把转换成字符串
content = new string(data);
// 内容编码方式
if (content.contains("gb2312")) {
content = new string(data, "gb2312");
}
}
// 断开连接
httpurlconnection.disconnect();
} catch (malformedurlexception e) {
e.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
}
return content;
}
}

复制代码 代码如下:

public class streamtools {
public static byte[] istodata(inputstream is) throws ioexception{

//字节输出流
bytearrayoutputstream bops = new bytearrayoutputstream();
//读取数据的缓存区
byte buffer[] = new byte[1024];
//读取长度 的记录
int len = 0;
//循环读取
while((len = is.read(buffer)) != -1){
bops.write(buffer, 0, len);
}
//把读取的内容转换成 byte数组
byte data[] = bops.tobytearray();

return data;

}
}

复制代码 代码如下:

public class networkutils {
private context context;
// 网路链接管理对象
public connectivitymanager connectivitymanager;
public networkutils(context context) {
this.context = context;
// 获取网络链接的对象
connectivitymanager = (connectivitymanager) context
.getsystemservice(context.connectivity_service);
}
//public void setactivenetwork() {
public boolean setactivenetwork() {
boolean flag = false;
// 获取可用的网络链接对象
networkinfo networkinfo = connectivitymanager.getactivenetworkinfo();
if (networkinfo == null) {
new alertdialog.builder(context)
.settitle("网络不可用")
.setmessage("可以设置网络?")
.setpositivebutton("确认",
new dialoginterface.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
toast.maketext(context, "点击确认",
toast.length_long).show();
// 声明意图
intent intent = new intent();
intent.setaction(intent.action_main);
intent.addcategory("android.intent.category.launcher");
intent.setcomponent(new componentname(
"com.android.settings",
"com.android.settings.settings"));
intent.setflags(0x10200000);
// 执行意图
context.startactivity(intent);
}
})
.setnegativebutton("取消",
new dialoginterface.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
}
// 必须.show();
}).show();
}
//判断网络是否可用
if(networkinfo!=null){
flag=true;
}
return flag;
}
}

然后就是要在androidmanifest.xml中添加 可以访问网络的权限
复制代码 代码如下:

<uses-permission android:name="android.permission.access_network_state"/>
<uses-permission android:name="android.permission.internet"/>