1.它的功能是用来展示网页的,就是给程序中嵌入一个内置的浏览器用来展示页面
2.在布局文件中声明
<WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"></WebView>3.在主窗口中
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView)this.findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true);//支持JavaScript的解析 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url);//根据传入的参数去加载新的网页 return true;//表示当前的WebView可以出来打开新的网页的请求,不用借助系统浏览器 } }); webView.loadUrl("http://www.baidu.com"); }3.需要声明上网的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
在android中发送http请求的方式有两种 HttpURLConnection 和 HttpClient
HTTP的工作原理:客户端向服务器发出一条HTTP请求,服务器端接收到请求后会返回一些数据给客户端,然后客户端对这些数据进行解析和处理
HttpURLConnection的用法
package com.example.administrator.myapplication; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends AppCompatActivity { public static final int SHOW_RESPONSE = 0; private Button sendRequest; private TextView responseText; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case SHOW_RESPONSE : String response = (String)msg.obj; responseText.setText(response); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendRequest = (Button) this.findViewById(R.id.send_request); responseText = (TextView) this.findViewById(R.id.response); sendRequest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendRequestWithHttpURLConnection(); } }); } //将按钮点击的事件封装起来 public void sendRequestWithHttpURLConnection(){ //因为我们要发出一个网络的请求,会有延迟那么我们就需要开启一个新的线程(记得启动.start()!!!),又因为我们要更新UI界面,所以要Handler机制 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { //首先需要获取到HttpURLConnection的实例,一般只需new出一个URL对象,并传入目标的网络地址,然后调用一下openConnection()方法即可 URL url = new URL("http://www.baidu.com"); connection = (HttpURLConnection )url.openConnection(); //设置http请求所用的方法 get(从服务器获取数据)和post(将数据提交给服务器) connection.setRequestMethod("GET"); //设置连接超时 connection.setConnectTimeout(8000); //读取超时的毫秒数 connection.setReadTimeout(8000); //获取服务器返回的输入流 InputStream inputStream = connection.getInputStream(); //对输入流进行读取 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream) ); StringBuilder response = new StringBuilder(); String line; while ((line = bufferedReader.readLine())!=null){ response.append(line); } //发送一个消息 Message message = new Message(); message.what = SHOW_RESPONSE; //将服务器返回的结果放在message中 message.obj = response.toString(); handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); }finally { //关掉http连接 if(connection!=null) connection.disconnect(); } } }).start();//开启线程!!! }
需要声明上网的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
在真机上的效果是
给服务器提交数据的方法
将HTTP请求的方法改为POST,并在获取输入流之前把要提交的数据写出即可
每条数据要以键值对的形式存在,数据与数据之间用&隔开
例如:提交账号和密码
connection.setRequsetMethod("POST");
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456")
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HttpClient的用法
HttpClient是网络访问接口,所以我们无法创建它的实例,我们通常情况下都会建立DefaultHttpClient实例
HttpClient httpClient = new DefaultHttpClient();
发送GET请求
创建HTTPGet对象,并传入目标的网络,然后调用HttpClient的execute ()方法
HttpGet httpGet = new HttpGet("http;//www.baidu.com");
httpClient.execute(httpGet);
发送POST请求
创建HttpPost对象,并传入目标的网络地址
HttpPost httpPost = new HttpPost("http://www.baidu.com");
然后通过一个NameValuePair集合来存放待提交的参数,并将这个参数集合传入到UrlEncodeFormEntity中,然后调用HttpPost的setEntity方法将构建好的UrlEncodeFormEnity传入
List <NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username","admin"));
params.add(new BasicNameValuePair("password","123456"));
UrlEncodeFormEntity entity = new UrlEncodeFormEntity(params,"utf-8");
httpPost.setentity(entity);
最后
httpClient.execute(httptPost);
执行execute后服务器会返回HTTPResponse对象,服务器所返回的所有信息就保存在这里面
通常情况下我们会取出服务器返回的状态码,如果等于200就说明请求和响应成功
if(httpResponse.getStatusLine().getStatusCode()==200){
请求和响应成功
在这里面取出返回的数据,调用getEntity()方法获取到一个HttpEntity实例 ,然后再用EntityUtils.toString()这个静态方法将HttpEntity转换成字符串即可
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity,"utf-8");
}