本文共 3791 字,大约阅读时间需要 12 分钟。
网络编程主要是在手机端使用 HTTP 协议和服务器端进行网络交互,并对服务器返回的数据进行解析,也是 Android 中最常使用到的网络技术了,
提供了一个 WebView 控件,借助它我们就可以在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页。 在布局文件中加入一个WebView控件。
设置一个id,并让他充满整个屏幕。
public class MainActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.web_view); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 根据传入的参数再去加载新的网页 view.loadUrl(url); // 表示当前WebView可以处理打开新网页的请求,不用借助系统浏览器 return true; } }); webView.loadUrl("http://www.baidu.com"); }}
WebView 的 getSettings()方法可以去设置一些浏览器的属性 ,调用了 setJavaScriptEnabled()方法来让 WebView 支持 JavaScript 脚本。 调用 WebView 的 setWebViewClient()方法,并传入了 WebViewClient 的匿名类作为参数,然后重写了 shouldOverrideUrlLoading()方法。这就表明当需要从一个网页跳转到另一个网页时,我们希望目标网页仍然在当前 WebView 中显示,而不是打开系统浏览器。调用 WebView 的 loadUrl()方法,并将网址传入,即可展示相应网页的内容
由于使用到网络内容,而访问网络是需要声明权限的,因此我们还需要修改AndroidManifest.xml 文件,并加入权限声明。
工作原理,就是客户端向服务器发出一条HTTP 请求,服务器收到请求之后返回一些数据给客户端,然后客户端再对这些数据进行解析和处理。
在Android上发送HTTP请求的方式一般有两种,HttpURLConnection 和 HttpClient(接口)。
获取实例:只需要New出一个URL对象,并传入目标的网路地址。然后调用一下openConnection()方法即可 。
URL url = new URL("http://www.baidu.com");HttpURLConnection connection = (HttpURLConnection) url.openConnection();
设置请求的方式GET / POST
connection.setRequestMethod("GET");
可以进行一些自由的定制,如设置连接超时,读取超时的毫秒数等等。
connection.setConnectTimeout(8000); // 连接超时时间connection.setReadTimeout(8000); // 读取超时时间
获取服务器返回的输入流
InputStream in = connection.getInputStream();
关闭HTTP连接
connection.disconnect();
private void sendRequestWithHttpURLConnection() { // 开启线程来发起网络请求,在线程中进行网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL("http://www.baidu.com"); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); connection.setDoInput(true); connection.setDoOutput(true); InputStream in = connection.getInputStream(); // 下面对获取到的输入流进行读取 BufferedReader reader = new BufferedReader( new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.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 { if (connection != null) { connection.disconnect(); } } } }).start(); }
它可以完成和 HttpURLConnection 几乎一模一样的效果,但两者之间的用法却有较大的差别。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集合来存放待提交的参数,并将集合传入到一个UrlEncodedFormEntity 中,然后调用 HttpPost 的 setEntity()方法将构建好的 UrlEncodedFormEntity传入,
Listparams = new ArrayList ();params.add(new BasicNameValuePair("username", "admin"));params.add(new BasicNameValuePair("password", "123456"));UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");httpPost.setEntity(entity);
太难了 不写了!!!!!!!!!!!!!!
转载地址:http://nhirn.baihongyu.com/