android中数据请求方式有哪些

android中数据请求方式有哪些,第1张

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。

Javanet包中的HttpURLConnection类

Get方式:

[java] view plain copy

// Get方式请求

public static void requestByGet() throws Exception {

String path = "https://reg163com/loginsjspid=helloworld&pwd=android";

// 新建一个URL对象

URL url = new URL(path);

// 打开一个HttpURLConnection连接

HttpURLConnection urlConn = (HttpURLConnection) urlopenConnection();

// 设置连接超时时间

urlConnsetConnectTimeout(5 1000);

// 开始连接

urlConnconnect();

// 判断请求是否成功

if (urlConngetResponseCode() == HTTP_200) {

// 获取返回的数据

byte[] data = readStream(urlConngetInputStream());

Logi(TAG_GET, "Get方式请求成功,返回数据如下:");

Logi(TAG_GET, new String(data, "UTF-8"));

} else {

Logi(TAG_GET, "Get方式请求失败");

}

// 关闭连接

urlConndisconnect();

php做前端,java做后端淘宝是个例子服务器端前后分开是为了两方面,虽然淘宝最开始并不想这样做。。。先说下历史,淘宝是最开始php全部,后来发现开销太大,代码效率不行,就直接把数据存储啊,用户通知啊就交给java实际上大部分网站都乐意采用这种前端php后端java或者c++这种形式,我是phpc++这种。优点,核心动作效率肯定高,c++java这种代码效率奇高。比php脚本好很多。前端php,语法简单,维护简单,部署简单,而且容易找到维护人员。总之就是开发快,维护成本低。大致了解了吗?你说的h5+java实际上就是把java提到前台,不是不可以,维护和开发成本太高了啊。前端开发要经常搞,但是java做前台要调试、编译部署还要重编译。麻烦,人工开销也大。不划算如果是net技术就更高成本了。光服务器软件一块就要多少了。所以微软的框架用的不多。国内外都不多,用met的成本开发维护都麻烦。要气硬件条件还苛刻。

Android进程间通信的几种方式 定义多进程

第一:Android应用中使用多进程只有一个办法(用NDK的fork来做除外),就是在AndroidManifestxml中声明组件时,用android:process属性来指定。

不知定process属性,则默认运行在主进程中,主进程名字为包名。

android:process = package:remote,将运行在package:remote进程中,属于全局进程,其他具有相同shareUID与签名的APP可以跑在这个进程中。

android:process = :remote ,将运行在默认包名:remote进程中,而且是APP的私有进程,不允许其他APP的组件来访问。

第二:多进程引发的问题

静态成员和单例失效:每个进程保持各自的静态成员和单例,相互独立。

线程同步机制失效:每个进程有自己的线程锁。

SharedPreferences可靠性下降:不支持并发写,会出现脏数据。

Application多次创建:不同进程跑在不同虚拟机,每个虚拟机启动会创建自己的Application,自定义Application时生命周期会混乱。

综上,不同进程拥有各自独立的虚拟机,Application,内存空间,由此引发一系列问题。

第三: 进程间通信

Bundle/Intent传递数据:

可传递基本类型,String,实现了Serializable或Parcellable接口的数据结构。Serializable是Java的序列化方法,Parcellable是Android的序列化方法,前者代码量少(仅一句),但I/O开销较大,一般用于输出到磁盘或网卡;后者实现代码多,效率高,一般用户内存间序列化和反序列化传输。

文件共享:

对同一个文件先后写读,从而实现传输,Linux机制下,可以对文件并发写,所以要注意同步。顺便一提,Windows下不支持并发读或写。

Messenger:

Messenger是基于AIDL实现的,服务端(被动方)提供一个Service来处理客户端(主动方)连接,维护一个Handler来创建Messenger,在onBind时返回Messenger的binder。

双方用Messenger来发送数据,用Handler来处理数据。Messenger处理数据依靠Handler,所以是串行的,也就是说,Handler接到多个message时,就要排队依次处理。

AIDL:

AIDL通过定义服务端暴露的接口,以提供给客户端来调用,AIDL使服务器可以并行处理,而Messenger封装了AIDL之后只能串行运行,所以Messenger一般用作消息传递。

通过编写aidl文件来设计想要暴露的接口,编译后会自动生成响应的java文件,服务器将接口的具体实现写在Stub中,用iBinder对象传递给客户端,客户端bindService的时候,用asInterface的形式将iBinder还原成接口,再调用其中的方法。

ContentProvider:

系统四大组件之一,底层也是Binder实现,主要用来为其他APP提供数据,可以说天生就是为进程通信而生的。自己实现一个ContentProvider需要实现6个方法,其中onCreate是主线程中回调的,其他方法是运行在Binder之中的。自定义的ContentProvider注册时要提供authorities属性,应用需要访问的时候将属性包装成Uriparse("content://authorities")。还可以设置permission,readPermission,writePermission来设置权限。 ContentProvider有query,delete,insert等方法,看起来貌似是一个数据库管理类,但其实可以用文件,内存数据等等一切来充当数据源,query返回的是一个Cursor,可以自定义继承AbstractCursor的类来实现。

Socket:

学过计算机网络的对Socket不陌生,所以不需要详细讲述。只需要注意,Android不允许在主线程中请求网络,而且请求网络必须要注意声明相应的permission。然后,在服务器中定义ServerSocket来监听端口,客户端使用Socket来请求端口,连通后就可以进行通信。

解答:初步判断,json解析有问题。一般情况下,解析json必须要明确json字符串的内容。通俗地来讲,就是说你要知道整个json字符串的结构组成,有几个大括号{},包括嵌套的大括号{},有几个中括号[],包括嵌套的[]。然后由外及内,最外层肯定是大括号{},就是一个json对象,也就是JsonObject,接着再在这一层,看看有没有中括号[],有的话就是json数组,也就是JsonArray,当前层的字段值可以根据当前层的json对象和字段名获取。如此,往内再走下一层json对象,也就是说查看第二个大括号{},依此类推。

可使用Android自带的httpClient实现Android与java web之间的数据的交互。

具体实现代码:

1 GET 方式传递参数

//先将参数放入List,再对参数进行URL编码

List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();

paramsadd(new BasicNameValuePair("param1", "数据")); //增加参数1

paramsadd(new BasicNameValuePair("param2", "value2"));//增加参数2

String param = URLEncodedUtilsformat(params, "UTF-8");//对参数编码

String baseUrl = "服务器接口完整URL";

HttpGet getMethod = new HttpGet(baseUrl + "" + param);//将URL与参数拼接

HttpClient httpClient = new DefaultHttpClient();

try {

HttpResponse response = httpClientexecute(getMethod); //发起GET请求

Logi(TAG, "resCode = " + responsegetStatusLine()getStatusCode()); //获取响应码

Logi(TAG, "result = " + EntityUtilstoString(responsegetEntity(), "utf-8"));//获取服务器响应内容

} catch (ClientProtocolException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

2 POST方式 方式传递参数

//和GET方式一样,先将参数放入List

params = new LinkedList<BasicNameValuePair>();

paramsadd(new BasicNameValuePair("param1", "Post方法"));//增加参数1

paramsadd(new BasicNameValuePair("param2", "第二个参数"));//增加参数2

try {

HttpPost postMethod = new HttpPost(baseUrl);//创建一个post请求

postMethodsetEntity(new UrlEncodedFormEntity(params, "utf-8")); //将参数填入POST Entity中

HttpResponse response = httpClientexecute(postMethod); //执行POST方法

Logi(TAG, "resCode = " + responsegetStatusLine()getStatusCode()); //获取响应码

Logi(TAG, "result = " + EntityUtilstoString(responsegetEntity(), "utf-8")); //获取响应内容

} catch (UnsupportedEncodingException e) {

eprintStackTrace();

} catch (ClientProtocolException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

不能与数据库连接的

Android客户端不能直接与服务器数据库连接。数据库是需要非常大的内存,安装之后有好几G,连接数据库要有一个像SQLServer里的webservice,这样的一个桥梁来间接访问。就是在服务器运行一个服务端程序,该服务端程序通过接收来自android客户端的指令,对数据库进行操作。

客户端的http请求可以通过 HttpClient类实现,在anddroid 40之后,客户端的网络请求已经不被允许在主线程中运行,所以还需注意另开启一个子线程进行网络请求。

扩展资料:

Android安全权限机制:

Android默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。

下载一款Android应用通常会要求如下的权限:拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、

还有对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄等。

——Android

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » android中数据请求方式有哪些

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情