当前位置: 移动技术网 > 移动技术>移动开发>Android > Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

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

2019年07月24日  | 移动技术网移动技术  | 我要评论
 
首先实现简单布局:
复制代码 代码如下:

<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>

新建类文件 :
 
首先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"/>

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网