文档章节

[Android开发实践]搭建本地API服务器与HTTP请求调用

暗夜在火星
 暗夜在火星
发布于 2014/06/28 12:22
字数 1083
阅读 1337
收藏 16

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

目的

在Android开发下,可以实现app对特定API服务器进行接口请求。


场景

现在很多项目都是基于C/S架构,所以在个人开发过程需要搭建类似的开发测试环境。列举一下本次的环境:

开发环境:Window 7 + Eclipse + ADT (假设已搭建好Android开发环境)

Server:Ubuntu 11.10 + Nginx + PHP (运行在虚拟机)

Client::Android 2.3

如下图所示:

温暖提示:

如果虚拟机ping不通,请检测是否在同一个网段,如不是需要修改成桥接模式,并检查防火墙设置。


API服务器搭建

首先是服务器环境,因为要实现API开发,所以这里使用了本人之前自主开发的PHP框架(请参考:zenphpWS3 :自主开发的PHP Web Services轻量级开发框架),暂时不考虑业务实现,只是利用这个框架在LAMP环境上快速构建一个API接口环境,并实现简单的响应。这里不使用Hello World接口,因为框架有默认的接口。这里配置的服务器域名为:http://dogstar.api.shakenext.com/,请求此域名,默认下会返回:

{"status":"OK","data":"Welcome to use zenphpWS3!","error":"","debug":{"msg":"This is default service!"}}

也可以通过请求此接口,验证服务器是否搭建运行正确。


Android配置HOST

其次是实现对API的调用请求。由于请求的是本地测试环境的域名,所以可以通过配置修改Android上的HOST来保证正确请求。但需要修改Android上的HOST需要ROOT权限,所以请参考ROOT权限获取相关的操作。获取后,可以通过adb来验证,如下即表示root权限获取成功。

E:\>adb shell
$ su
su
#

随后将android上的HOSTS保存在本地电脑,使用命令:

adb pull /system/etc/hosts G:/

最好指定保存的路径,以免找不到。

编辑hosts文件,添加API服务器的IP:

127.0.0.1            localhost

#ubuntu
192.168.0.100            dogstar.api.shakenext.com

注意,在配置HOST时,域名最后需要换行,否则会导致域名不能正常解析。

在第一次导入hosts文件到Android系统前,需要修改hosts文件的权限,否则会提示无权限。使用以下命令:

E:\>adb shell
$ su
su
#chmod 777 /system/etc/hosts

再使用以下命令导入host文件:

adb push G:\hosts /system/etc/hosts

进入Android验证:

$ ping dogstar.api.shakenext.com
ping dogstar.api.shakenext.com
PING dogstar.api.shakenext.com (192.168.0.100) 56(84) bytes of data.
64 bytes from dogstar.api.shakenext.com (192.168.0.100): icmp_seq=1 ttl=64 time=1914 ms
64 bytes from dogstar.api.shakenext.com (192.168.0.100): icmp_seq=2 ttl=64 time=2445 ms


Android接口请求

最后,创建Android应用,并实现接口请求。

打开Eclipse后,File->New->Android Application Project->项目名称->继续下一步。

创建完成后,为了实现对接口的HTTP请求,这里参考了Android Http请求方法汇总 ,稍微改动了一下,如下所示:

package com.dogstar.shakenext.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class ApiClient {
    public static String executeHttpGet(String requestUrl) {
        String result = null;
        URL url = null;
        HttpURLConnection connection = null;
        InputStreamReader in = null;
        try {
            //url = new URL("http://10.0.2.2:8888/data/get/?token=alexzhou");
            url = new URL(requestUrl);
            connection = (HttpURLConnection) url.openConnection();
            in = new InputStreamReader(connection.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(in);
            StringBuffer strBuffer = new StringBuffer();
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                strBuffer.append(line);
            }
            result = strBuffer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return result;
    }
}

将以下调用的代码放置在可运行的位置,如按钮响应,测试一下接口请求。

Log.v("[TRACE]", "onClick");
String rs = ApiClient.executeHttpGet("http://dogstar.api.shakenext.com/");
Log.v("[TRACE]", "api result" + rs);

正常运行并响应后,可以LOG看到以下的输出:

06-28 11:43:42.425: V/[TRACE](4947): onClick

06-28 11:43:42.755: V/[TRACE](4947): api result{"status":"OK","data":"Welcome to use zenphpWS3!","error":"","debug":{"msg":"This is default service!"}}

如果出现UnknowHostException,请检测是否已在AndroidManifest.xml添加网络权限:

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


下一步

至此,搭建完成。Enjoy your coding!

这里只是讲述快速搭建一个需要联网Android应用开发环境,并让其初步运行起来,把整体流程跑通。代码都只是示例性的代码,应该在后期逐渐完善和重构。

© 著作权归作者所有

暗夜在火星

暗夜在火星

粉丝 172
博文 178
码字总数 327084
作品 1
广州
程序员
私信 提问
使用 Dojo Mobile 和 PhoneGap 构建移动应用程序

简介: 随着移动设备计算能力的日益增强以及无线网络的普及,人们对于移动应用的需求越来越大。由于主流平台的差异, 如 iOS 和 Android,应用程序需要针对不同的平台进行重复开发。为解决这...

IBMdW
2012/05/07
2.1K
6
Android客户端与服务器交互方式-小结

最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件...

x-knight_勋爵
2016/04/18
0
0
Android应用开发之使用PhoneGap实现拍照上传功能

看这里:Android应用开发之使用PhoneGap实现拍照上传功能 在之前的使用Intellij Idea 搭建PhoneGap Android开发环境以及Android应用开发之使用PhoneGap实现位置上报功能两篇文章中,我们学习...

Realfighter
2015/02/05
10.6K
3
Android开发学习总结(一)——搭建最新版本的Android开发环境

最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环 境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,...

wensongyu
2015/04/16
0
0
关于跨平台移动应用开发框架的探索 -- PhoneGap

本文通过介绍移动互联网的发展,引出了跨平台移动应用开发的现状,并对当前的跨平台移动应用开发框架进行了比较。在实践环节中,本文首先使用 PhoneGap Build 将 HTML 程序发布为多移动平台的...

IBMdW
2011/11/24
3.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

跑分44W的荣耀V30 5G手机,真香!

     昨天看了红米K30的发布会,感触颇多啊,“卢本伟”就是雷军请来恶心荣耀的吧,恶心的还淋漓尽致,发布会全程diss荣耀V30,结果跑分出来的那一刻,网友们笑了。红米K30 26W+的跑分充...

梅丽莎好
17分钟前
7
0
技术分享 | 巧用 binlog Event 发现问题

作者:高鹏(八怪) 文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。 有了前面对 Event 的了解,我们就可以利用这些 Event 来完成一些...

爱可生
18分钟前
7
0
php之微信公众号发送模板消息

讲一下开发项目中微信公众号发送模板消息的实现过程(我用的还是Thinkphp5.0)。先看一下效果,如图: 就是类似于这样的,下面讲一下实现过程: 第一步:微信公众号申请模板消息权限: 立即申请...

owenzhang24
24分钟前
6
0
Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库

摘要 Maven 中央仓库并不支持直接上传 jar 包,因此需要将 jar 包发布到一些指定的第三方 Maven 仓库,比如:Sonatype OSSRH 仓库,然后该仓库再将 jar 包同步到 Maven ,本文详细记录整个发...

NebulaGraph
35分钟前
5
0
海思3516cv500 SDK开发环境搭建

环境Ubuntu 16.0.4 LTS, SDK文件:Hi3516CV500_SDK_V2.0.1.0.tgz,解压此文件到当前目录运行Hi3516CV500_SDK_V2.0.1.0目录下的sdk.unpack,执行此脚本时报unknown source,但sdk.unpack脚本里...

仪山湖
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部