文档章节

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

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

目的

在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应用开发环境,并让其初步运行起来,把整体流程跑通。代码都只是示例性的代码,应该在后期逐渐完善和重构。

© 著作权归作者所有

暗夜在火星

暗夜在火星

粉丝 171
博文 177
码字总数 326789
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
7
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
6
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
7
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
5
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部