是一个开放的浏览器组件,是基于WebKit内核开发出来的,像苹果的Safari、Google Chrome浏览器都是通过WebView实现的, 而在Android系统之中,默认也提供了WebView组件的支持,用户可以直接使用WebView组件显示网页的内容,或者是将一些指定的HTML文件嵌入进来, 除了支持各个浏览器的“前进”、“后退”等功能之外,最为强大的是在WebView组件之中也支持JavaScript的操作。 android.webkit.WebView的继承结构如下所示: java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.AbsoluteLayout ? android.webkit.WebView
public class MainActivity extends AppCompatActivity { private EditText et_user,et_password; private Button btn_login; private MyThread thread=null; private MyHandle handle=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView(){ handle=new MyHandle();//实例化控件时候也实例化handle et_user= (EditText) findViewById(R.id.et_user); et_password= (EditText) findViewById(R.id.et_password); btn_login= (Button) findViewById(R.id.btn_login); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //①实例化控件,给按钮添加点击事件,点击按钮启动子线程 if (thread==null){ thread=new MyThread(); thread.start(); } } }); }
/** * ②自定义子线程 */ class MyThread extends Thread{ //③重写run方法 //访问网络,进行登录,把登录的结果利用handle发送到主线程,写一个访问网络的方法 @Override public void run() { super.run(); //⑤调用访问网络的方法,获取结果值 // String result= loginGet(); String result=loginPost(); //⑥子线程向主线程发送message,需要自定义handle Message message= handle.obtainMessage(1,result); handle.sendMessage(message); //发送过消息,线程置空,方便下次使用 thread=null; } }/** * ⑦自定义Handle类,发送消息 * */ class MyHandle extends Handler{ //重写handleMessage方法 @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 1: Toast.makeText(MainActivity.this,msg.obj.toString(),Toast.LENGTH_SHORT).show(); break; }
/** * ④定义一个访问网络的方法 *get请求方式,明文传参 */ private String loginGet(){ String username=et_user.getText().toString(); String password=et_password.getText().toString(); String strurl=null; //输入框非空验证 if(username!=null&&password!=null){ strurl=”http://192.168.15.114:8080/HttpTest/Login?username=”+username+”&password=”+password; } try { URL url=new URL(strurl); HttpURLConnection conn= (HttpURLConnection) url.openConnection();//打开连接 conn.setRequestMethod(“GET”);//设置请求方式,大写的GET //获取请求结果 int code=conn.getResponseCode(); if(code==200){//请求成功,返回请求结果码200,读取流结果 InputStream is=conn.getInputStream();//获取流文件 InputStreamReader isr=new InputStreamReader(is);//读取流文件 BufferedReader reader=new BufferedReader(isr);//一次读一行 String line=”“;//定义空行用于追加内容 StringBuffer buffer=new StringBuffer(); while ((line=reader.readLine())!=null){//如果还没有读完 buffer.append(line);//一直追加内容 } //关闭流,断开连接 reader.close(); conn.disconnect(); //返回获取到的请求结果 return buffer.toString(); }else { return “访问失败”; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return “访问失败”; }
/** * post请求方法 * 与get请求就只有发送数据的方式不同,不是明文传参 */ private String loginPost(){ String username=et_user.getText().toString(); String password=et_password.getText().toString(); String strurl=null; String data=null; //输入框非空验证 if(username!=null&&password!=null){ strurl=”http://192.168.15.114:8080/HttpTest/Login”; data=”username=”+username+”&password=”+password; } try { URL url=new URL(strurl); HttpURLConnection conn= (HttpURLConnection) url.openConnection();//打开连接 // conn.setRequestMethod(“GET”);//设置请求方式,大写的GET conn.setRequestMethod(“POST”);//设置请求方式为POST //允许输入输入数据的设定,允许输入和输出,将数据date写入内存 conn.setDoInput(true); conn.setDoOutput(true); //设置请求的头 conn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”); conn.setRequestProperty(“Charset”, “utf-8”); conn.setRequestProperty(“Content-Length”, “” + data.getBytes().length); //将data数据写入内存 OutputStream os=conn.getOutputStream(); os.write(data.getBytes()); os.flush();//刷新内存中的数据 //获取请求结果 int code=conn.getResponseCode(); if(code==200){//请求成功,返回请求结果码200,读取流结果 InputStream is=conn.getInputStream();//获取流文件 InputStreamReader isr=new InputStreamReader(is);//读取流文件 BufferedReader reader=new BufferedReader(isr);//一次读一行 String line=”“;//定义空行用于追加内容 StringBuffer buffer=new StringBuffer(); while ((line=reader.readLine())!=null){//如果还没有读完 buffer.append(line);//一直追加内容 } //关闭流,断开连接 reader.close(); conn.disconnect(); //返回获取到的请求结果 return buffer.toString(); }else { return “访问失败”; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return “访问失败”; }