一般手机都是需要上网的,一般我们的浏览器就是个webview。这里简单实现下下功能,先编写Android的layout布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:layout_margin="10dp"android:padding="10dp"tools:context="com.example.jared.webviewstudy.MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/netAddress"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/openNetAddress"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_weight="0"android:text="Open"android:textAllCaps="false"/></LinearLayout><WebViewandroid:id="@+id/webView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

这里主要是一个EditText用来输入网址,然后一个Button用来打开网页,webView用来呈现网页。编写代码如下:

package com.example.jared.webviewstudy;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;public class MainActivity extends AppCompatActivity {private WebView myWebView;private EditText networkAddr;private Button openNetwork;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);networkAddr = (EditText)findViewById(R.id.netAddress);myWebView = (WebView)findViewById(R.id.webView);openNetwork = (Button)findViewById(R.id.openNetAddress);openNetwork.setOnClickListener(new myOnClickListener());}class myOnClickListener implements View.OnClickListener {@Overridepublic void onClick(View view) {myWebView.getSettings().setJavaScriptEnabled(true);myWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}});String networkAddress = networkAddr.getText().toString();myWebView.loadUrl("http://"+networkAddress);}}
}

还有就是权限问题了:

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

这里通过setWebViewClient方法,实例化一个WebViewClient,loadurl实现网页的加载。运行看下效果:

   

这里打开了百度和我的博客的地址,界面略难看,勉强看看了。

一般网络编程都是通过http的,下面就来实现下,首先是HttpURLConnection,这个一般是google官方提供的,还有一个HttpClient,本来有的,现在api23也没有了,需要自己加载进来。

先使用HttpURLConnection和HttpClient吧,新建工程,编写layout代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:layout_margin="10dp"tools:context="com.example.jared.httpurlconnectionstudy.MainActivity"><Buttonandroid:id="@+id/sendRequest"android:text="发送请求"android:layout_width="match_parent"android:layout_height="wrap_content" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/response"android:layout_width="match_parent"android:layout_height="wrap_content" /></ScrollView></LinearLayout>

这里主要就是一个按钮获取数据,然后http请求的数据通过ScrollView可以滑动浏览更多的信息,然后把获取到的信息显示在TextView里面。

编写MainActivity,里面有实现了HttpURLConnection和HttpClient:

package com.example.jared.httpurlconnectionstudy;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;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 {private static final int SHOW_RESPONSE = 1;private Button sendRequestBtn;private TextView responseView;private Handler mHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SHOW_RESPONSE:String responseContent = (String)msg.obj;responseView.setText(responseContent);break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActionBar actionBar = getSupportActionBar();actionBar.hide();setContentView(R.layout.activity_main);responseView = (TextView)findViewById(R.id.response);sendRequestBtn = (Button)findViewById(R.id.sendRequest);sendRequestBtn.setOnClickListener(new myOnClickListener());}private class myOnClickListener implements View.OnClickListener {@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.sendRequest:String url = "http://www.baidu.com";//sendRequestWithHttpURLConnection(url);sendRequestWithHttpClient(url);break;default:break;}}}private void sendRequestWithHttpClient(final String url) {new Thread(new Runnable() {@Overridepublic void run() {try {HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(url);HttpResponse httpResponse = httpClient.execute(httpGet);if(httpResponse.getStatusLine().getStatusCode() == 200) {HttpEntity entity = httpResponse.getEntity();String response = EntityUtils.toString(entity, "utf-8");Message message = new Message();message.what = SHOW_RESPONSE;message.obj = response.toString();mHandler.sendMessage(message);}} catch (Exception e) {e.printStackTrace();}}}).start();}private void sendRequestWithHttpURLConnection(final String url) {new Thread(new Runnable() {@Overridepublic void run() {HttpURLConnection connection = null;try {URL mUrl = new URL(url);connection = (HttpURLConnection)mUrl.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);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.obj = response.toString();mHandler.sendMessage(message);} catch (Exception e) {e.printStackTrace();} finally {if (connection != null) {connection.disconnect();}}}}).start();}
}

这里的HttpClient需要在\sdk\platforms\android-23\optional下倒入包到工程目录的libs下面,然后

在build.gradle下面添加

// Apache Http
android {useLibrary 'org.apache.http.legacy'
}
// Header
dependencies {compile "org.apache.httpcomponents:httpcore:4.3.2"
}

这样HttpClient就可以使用了,关于加载别的库,也基本上类似了。

运行效果如下:

关于Http常用的框架有android-async-http,下面就使用下。jar包可以从官网下载:http://loopj.com/android-async-http/。此外还得下载一个httpclient的jar包:http://mvnrepository.com/artifact/cz.msebera.android/httpclient/4.4.1.1。

修改build.gradle如下:

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:23.1.1'compile files('libs/android-async-http-1.4.9.jar')compile files('libs/httpclient-4.4.1.1.jar')
}

这里把两个包都放在了libs的目录下。切换到project目录,如下图:

修改MainActivity代码,添加sendRequestWithAsyncHttpClinet方法如下:

private void sendRequestWithAsyncHttpClient(String url) {AsyncHttpClient client = new AsyncHttpClient();client.get(url, new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int i, Header[] headers, byte[] bytes) {try {String response = new String(bytes, 0, bytes.length, "UTF-8");responseView.setText(response);}catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {}});}

运行可以得到我们一样的效果。AsyncHttpClient很方便地可以使用起来了,比起上面一大堆代码简单了不少。这里通过一个get方法,然后再onSuccess方法中把获取到的数据转为String显示在text就ok了。

关于网络编程的webview和http就基本学到这里了。在此还要谢谢朋友的提醒,光学基础,实际项目会用到很多框架的,需要去熟悉,这里继续慢慢学。

转载于:https://www.cnblogs.com/wuyida/p/6299954.html

Android开发学习之路--网络编程之初体验相关推荐

  1. android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  2. android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...

    本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便 ...

  3. android开发学习之路——连连看之游戏逻辑(五)

    GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...

  4. android开发学习之路——连连看之加载图片(三)

    正如前面AbstractBoard类的代码中看到的,当程序需要创建N个Piece对象时,程序会直接调用ImageUtil的getPlayImages()方法去获取图片,该方法将会随机从res\ dra ...

  5. Android开发学习之路-环境搭建

    这里选择使用android studio 集成开发环境,因为as是google推出的单独针对android开发的环境,并且迭代周期很快,因此,肯定会替代eclipse成为andorid的开发环境.对于 ...

  6. android 程序等待时间,Android开发学习之路--性能优化之常用工具

    Android性能优化相关的开发工具有很多很多种,这里对如下六个工具做个简单的使用介绍,主要有Android开发者选项,分析具体耗时的Trace view,布局复杂度工具Hierarchy View, ...

  7. Android开发学习之路--UI之简单聊天界面

    学了很多的ui的知识,这里就来实现个聊天的界面,首先来实现个layout的xml,代码如下: <?xml version="1.0" encoding="utf-8 ...

  8. Android开发_简单的网络编程

    URLConnection和HttpURLConnection使用的都是java.net中的类,属于标准的java接口. HttpURLConnection继承自URLConnection,差别在与H ...

  9. Android图片颜色比例,Android开发学习之路-图片颜色获取器开发(1)

    系列第一篇,从简单的开始,一步一步完成这个小项目. 颜色获取就是通过分析图片中的每个像素的颜色,来分析整个图片的主调颜色,有了主调颜色,我们可以用于图片所在卡片的背景或者标题颜色,这样整体感更加强烈. ...

最新文章

  1. 什么是高/低方差、高/低偏差、(推荐阅读)
  2. ios -使用NSLayoutConstraint实现多个view等宽等高等间距
  3. 国内pinterest发展介绍------瀑布流效果
  4. 2008_12_24_星期三
  5. java web如何使用aws,amazon-web-services - 使用java Jedis连接到aws elasticache redis
  6. 硬件信息修改大师_零成本学习之单片机硬件开发(1)
  7. LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分)
  8. 用MXNet实现mnist的生成对抗网络(GAN)
  9. 阿里巴巴闲鱼架构负责人王树彬:万亿交易规模技术架构实践
  10. [THUWC2017] 在美妙的数学王国畅游
  11. iview兼容ie8_如何解决iview在安卓4.4.4的webview中的兼容性
  12. python逗号表达式_python – 如何用位于括号外的逗号分割一个字符串?
  13. ‘utf-8‘ codec can‘t decode byte 0xb8 in position 0: invalid start byte
  14. 访问不了_etherscan访问不了的替代方案
  15. 2021-07-22MATLAB基于元胞自动机模型的传染病扩散模型
  16. IAR使用方法建立工程文件超详细操作步骤
  17. matlab显示变化的数字,如何在MATLAB中一起显示字符串和数字?
  18. 使用 C# 将数字转换成大写人民币
  19. 海康摄像头音频编码获取
  20. LeetCode412_412. Fizz Buzz

热门文章

  1. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...
  2. paddleOCR常见问题(2)
  3. 想学数学建模???先来看会这几个MATLAB题吧!!!(一)
  4. 机器学习(十)Mean Shift 聚类算法
  5. 人脸识别接口_人工智能 人脸识别双目模组摄像头 活体检测的重要作用
  6. c语言较大的整型相加,二个超长正整数的相加
  7. 组件基础-全局组件//全局组件的简写
  8. xftp实现本地与服务器的文件上传下载(windows)
  9. [转帖]win10 .Net Runtime Optimization Service占用大量CPU资源解决方法
  10. 【还是回来了】博客搬家--https://cangbean.github.io