颜三金 發表於 2020-3-21 08:54:00

Android网络开发

<h2 id="1-webview用法">1. WebView用法</h2>
<h4 id="布局文件新建一个webview特别注意线性布局和控件的宽高都要匹配父控件">①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件</h4>
<pre><code>&lt;LinearLayout xmlns: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" &gt;

    &lt;WebView
      android:id="@+id/wv_first"
      android:layout_width="match_parent"
      android:layout_height="match_parent" /&gt;

&lt;/LinearLayout&gt;
</code></pre>
<h4 id="代码中的配置">②代码中的配置</h4>
<pre><code>private WebView wv_first;
wv_first = (WebView) findViewById(R.id.wv_first);

                // getSettings()设置浏览器的属性
                // setJavaScriptEnabled(true)让WebView支持JavaScript脚本
                wv_first.getSettings().setJavaScriptEnabled(true);

                // setWebViewClient(new WebViewClient())
                // 这段代码的作用是当我们从一个网页跳转到另外一个网页的时候,目标         // 网页仍然在WebView中显示
                // 而不是打开系统浏览器
                wv_first.setWebViewClient(new WebViewClient());
               
                //传入网址,打开网页
                wv_first.loadUrl("http://www.baidu.com");

</code></pre>
<h4 id="androidmanifestxml文件中声明权限">③AndroidManifest.xml文件中声明权限</h4>
<pre><code>&lt;uses-permission android:name="android.permission.INTERNET"/&gt;
</code></pre>
<h2 id="2-使用http协议访问网络">2. 使用HTTP协议访问网络</h2>
<h3 id="1使用httpurlconnection">(1)使用HttpURLConnection</h3>
<p>首先学习一个新的控件ScrollView<br>
由于手机屏幕大小有限,而ScrollView允许我们通过滑动查看手机屏幕外的内容<br>
布局文件代码如下:</p>
<pre><code>&lt;ScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent" &gt;

      &lt;TextView
            android:id="@+id/tv_request_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" /&gt;
    &lt;/ScrollView&gt;
</code></pre>
<h4 id="新建一个按钮点击事件在按钮点击事件里开启一个子线程用于访问网络">①新建一个按钮点击事件,在按钮点击事件里开启一个子线程,用于访问网络</h4>
<pre><code>@Override
        public void run() {

                URL url;
                HttpURLConnection connection;
                try {
                        // 先new出一个URL对象,传入网络地址
                        // 调用openConnection()方法获取到HttpURLConnection对象
                        url = new URL("http://www.baidu.com");
                        connection = (HttpURLConnection) url.openConnection();
                        // 设置HTTP请求所使用的方法,GET或者POST
                        // GET表示从服务器获取数据
                        // POST表示向服务器提交数据
                        connection.setRequestMethod("GET");
                        // 下面使一些自由的定制,比如设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);
                        // 接下来利用输入流对数据进行读取
                        InputStream is = connection.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = br.readLine()) != null) {
                                response.append(line);
                        }
                        // 读取数据完毕,接下来将数据传送到Handler进行显示
                        Message message = new Message();
                        message.what = SHOW_REQUEST;
                        message.obj = response.toString();
                        handler.sendMessage(message);
                        //最后关闭HTTP连接
                        connection.disconnect();

                } catch (Exception e) {
                        e.printStackTrace();
                }

        }
</code></pre>
<h4 id="因为上面代码中是在子线程中所以不能显示在ui上所以要用handler机制将服务器返回的数据传递到主线程进行ui显示具体实现代码如下">②因为上面代码中是在子线程中,所以不能显示在UI上,所以要用Handler机制将服务器返回的数据传递到主线程进行UI显示,具体实现代码如下:</h4>
<pre><code>@Override
        public void handleMessage(Message msg) {
                if(msg.what==SHOW_REQUEST){
                        String response=(String) msg.obj;
                        //在这里进行UI操作将结果显示到UI上
                        tv_request_text.setText(response);
                       
                }
               
        }
</code></pre>
<h4 id="androidmanifestxml文件中声明权限-1">③AndroidManifest.xml文件中声明权限</h4>
<pre><code>&lt;uses-permission android:name="android.permission.INTERNET"/&gt;
</code></pre>
<h4 id="主activity中的代码如下">④主Activity中的代码如下</h4>
<pre><code>// Handler用来处理网络访问请求之后得到数据的显示
                MyHandler handler = new MyHandler(tv_request_text);
                // 创建访问网络的线程对象
                final SendHttpRequestThread request = new SendHttpRequestThread(handler);
                // 设置按钮点击事件
                btn_request.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // 开启线程
                                request.start();
                        }
                });
</code></pre>
<h3 id="2使用httpclient">(2)使用HTTPClient</h3>
<h4 id="布局文件不变开启的线程内的代码改为如下">①布局文件不变,开启的线程内的代码改为如下:</h4>
<pre><code>@Override
        public void run() {
                // 因为HttpClient是一个接口,所以无法直接创建它的对象,一般是用
                HttpClient client = new DefaultHttpClient();
                // 想要发起一条GET请求就创建一个HttpGet对象
                // 并传入目标网络地址,调用HttpClient的execute()方法传入HttpGet对象
                HttpGet httpGet = new HttpGet("http://www.baidu.com");
                try {
                        // 执行execute()方法后会返回HttpResponse对象,服务器返回的所有信息就包含在这里面了
                        HttpResponse response = client.execute(httpGet);
                        // 接下来取出服务器返回的状态码,如果是200就说明请求和响应都成功了
                        if (response.getStatusLine().getStatusCode() == 200) {
                                // 请求和响应都成功了,取出返回的具体内容
                                // response的getEntity()得到一个HttpEntity对象
                                // EntityUtils这个工具类的toString()方法将得到的内容转化成字符串
                                // 传入"utf-8"的目的是在服务器返回中文的时候防止乱码
                                HttpEntity entity = response.getEntity();
                                String responsetext = EntityUtils.toString(entity, "utf-8");

                                // 接下来将数据传送到Handler进行显示
                                Message message = new Message();
                                message.what = SHOW_REQUEST;
                                message.obj = responsetext;
                                handler.sendMessage(message);

                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }

        }
</code></pre>
<h4 id="androidmanifestxml文件中声明权限-2">②AndroidManifest.xml文件中声明权限</h4>
<h4 id="主activity中的代码如下-1">③主Activity中的代码如下</h4>
<pre><code>// Handler用来处理网络访问请求之后得到数据的显示
                MyHandler handler = new MyHandler(tv_request_text);
                //创建HttpCliect访问网络的线程对象
                final SendClientRequestThread requestThread=new SendClientRequestThread(handler);
                // 设置按钮点击事件
                btn_request.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // 开启线程
                                requestThread.start();
                        }
                });
</code></pre>
<h2 id="3-下载apache阿帕奇搭建web服务器">3. 下载Apache阿帕奇搭建Web服务器</h2>
<h3 id="1-安装环境">(1) 安装环境</h3>
<h4 id="系统windows-10-x86">系统:windows 10 x86</h4>
<h4 id="apache版本apache-2429">Apache版本:Apache 2.4.29</h4>
<h3 id="2-apache的下载">(2) Apache的下载</h3>
<h4 id="第一步">第一步:</h4>
<p><strong>登录http://httpd.apache.org/download.cgi 这个地址,2.4.16 ,如下图位置:</strong></p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085420710-1822019148.png"></p>
<h4 id="第二步">第二步:</h4>
<p><strong>进入如下界面后,选择第一项ApacheHaus,这是个第三方下载平台,在它的网站下载独立的Apache会是一个压缩包另外四个中,第二个也是独立的Apache下载地址,另外三个是集成开发环境。我这里选的第一个。</strong></p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085420914-617254893.png"></p>
<h4 id="第三步">第三步:</h4>
<p>在新的界面中,会发现VC9和VC11和VC14字样,通过阅读相关内容得知用VS2014编译的无法在windows xp和server 2003中使用。算是为了兼容性好点吧,我这里选的用VC14编译的64位Apache,选择下载至此,下载过程完成!</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085421123-1824871219.png"></p>
<h3 id="三安装">三.安装</h3>
<p>安装过程很简单,因为是压缩包,所以,先将其解压包中的 Apache24 解压到合适的位置</p>
<h3 id="4-配置httpdconf文件">4. 配置httpd.conf文件</h3>
<p>找到F:\Apache\httpd-2.4.29-o102n-x86-vc14-r2\Apache24\conf文件,用Notepad++打开,因为Notepad++是比较万能的记事本软件,所以用他打开,并且记住行号,以便于下次查找,找到:Define SRVROOT 这一项,将其右方的值改为,当前你Apache安装存放的目录地址,如下所示</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085421315-674715134.png"></p>
<p>apache的默认端口是80,如果发现被占用了,修改httpd.conf的如下选项,如下所示</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085421464-775187099.png"></p>
<h3 id="5-安装apache的主服务">5. 安装Apache的主服务</h3>
<p>温馨提示:一定要以管理员身份运行,不然会报错</p>
<p>以管理员的身份运行cmd命令(左下角搜索框搜索命令行,右键以管理员模式打开,F:进入指定盘符,cd..进入指定目录文件),进入apache的bin目录,执行如下命令</p>
<p>httpd.exe -k install -n androidapache</p>
<p>该命令的意思是,安装apache服务,并将该服务名称命名为androidapache(你也可以改成别的),回车。</p>
<p>如下所示</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085421642-1767394664.png"></p>
<h3 id="6-启动apache服务">6. 启动apache服务</h3>
<p>在安装目录中,找到\bin\ApacheMonitor.exe可执行文件,双击运行,桌面右下角会出现图标,双击打开窗口界面,会看到如图所示:</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085421814-229576156.png"></p>
<p>**点击start,完成apache的启动,在浏览器中输入http://localhost:80,出现如下界面,启动成功 **</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085421973-721129541.png"></p>
<h3 id="7-apahe服务的卸载">7. Apahe服务的卸载</h3>
<p>若Apache服务器软件不想用了,想要卸载,需要先卸载apache服务(切记,若直接删除安装路径的文件夹,会有残余文件在电脑,可能会造成不必要的麻烦)</p>
<p>在CMD命令窗口,输入如下(建议先停止服务再删除):</p>
<p><code>sc delete apache</code></p>
<p>apache是Apache服务器的服务名</p>
<p><font color="red" size="5"><em><strong><strong><strong><strong>重点来了</strong></strong></strong></strong></em>*****</font></p>
<h4 id="以上是apache搭建的过程搭建完成后我们需要用它创建我们自己的网页">①以上是Apache搭建的过程,搭建完成后,我们需要用它创建我们自己的网页</h4>
<h4 id="进入到apache的安装目录的htdoc目录下创建一个datahtml文件自定义随便-------输入一些内容">②进入到Apache的安装目录的\htdoc目录下创建一个data.html文件(自定义),随便       输入一些内容</h4>
<h4 id="在浏览器中访问http127001dataxml">③在浏览器中访问http://127.0.0.1/data.xml</h4>
<p>特别注意:127.0.0.1访问的本机服务器的ip地址,要想让别人访问这个服务器,必须先查看自己电脑的本机ip,然后将127.0.0.1换成这个ip地址<br>
这样设置之后就可以直接用上面的TTTP访问网络的方法直接得到数据</p>
<p><img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085422130-683925933.png"><br>
了解更多技术文章,欢迎关注我的个人公众号<br>
<img src="https://img2020.cnblogs.com/other/1617275/202003/1617275-20200321085422294-537504489.jpg"></p><br><br>
来源:https://www.cnblogs.com/yuzhou1234/p/12536493.html
頁: [1]
查看完整版本: Android网络开发