androidhttp数组
㈠ android okhttp怎么传一个数组
1. 你传list,然后转数组。
㈡ 请问Android 发送大量的http请求怎么做最好呢
你应该写清楚应用场景,懒得写代码,只写思路
分两种使用场景吧,第一种,就是无脑post,对服务器造成很大负担(如果这就是你的目的),那你只需要写个timer循环,每隔一秒或者几秒post服务端就行了
第二种,在get到结果后循环post,这个方式比较合理,不需要timer循环,对服务器负荷也小,需要一个hanlderMessage,在get到结果或异常后给hanlderMessage发送消息,handlerMessage再执行一次post即可
㈢ android的okhttp是怎么实现的
(一)Http Get
对了网络加载库,那么最常见的肯定就是http get请求了,比如获取一个网页的内容。
//创建okHttpClient对象
OkHttpClient mOkHttpClient = new OkHttpClient();
//创建一个Request
final Request request = new Request.Builder()
.url("https://github.com/hongyangAndroid")
.build();
//new call
Call call = mOkHttpClient.newCall(request);
//请求加入调度
call.enqueue(new Callback()
{
@Override
public void onFailure(Request request, IOException e)
{
}
@Override
public void onResponse(final Response response) throws IOException
{
//String htmlStr = response.body().string();
}
});
21222324
以上就是发送一个get请求的步骤,首先构造一个Request对象,参数最起码有个url,当然你可以通过Request.Builder设置更多的参数比如:header、method等。
然后通过request的对象去构造得到一个Call对象,类似于将你的请求封装成了任务,既然是任务,就会有execute()和cancel()等方法。
最后,我们希望以异步的方式去执行请求,所以我们调用的是call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。
看到这,你会发现,整体的写法还是比较长的,所以封装肯定是要做的,不然每个请求这么写,得累死。
ok,需要注意几点:
onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()
看到这,你可能会奇怪,竟然还能拿到返回的inputStream,看到这个最起码能意识到一点,这里支持大文件下载,有inputStream我们就可以通过IO的方式写文件。不过也说明一个问题,这个onResponse执行的线程并不是UI线程。的确是的,如果你希望操作控件,还是需要使用handler等,例如:
@Override
public void onResponse(final Response response) throws IOException
{
final String res = response.body().string();
runOnUiThread(new Runnable()
{
@Override
public void run()
{
mTv.setText(res);
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
我们这里是异步的方式去执行,当然也支持阻塞的方式,上面我们也说了Call有一个execute()方法,你也可以直接调用call.execute()通过返回一个Response。
㈣ Android开发怎么用xutilspost数组到后台
HttpUtils http = new HttpUtils();
RequestParams params = new RequestParams();
// params.addHeader("Content-Type", "application/json");
params.addBodyParameter("tel", tel);
params.addBodyParameter("password", password);
params.addBodyParameter("code", code);
http.send(HttpRequest.HttpMethod.POST, url,new RequestCallBack<String>() {
@Override
public void onFailure(HttpException error, String msg) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// TODO Auto-generated method stub
System.out.println(responseInfo.result);
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("请求路径===" + this.getRequestUrl());
}
);
㈤ Unity调用Android参数为数组的方法
作者个人网站: http://www.harddone.com
Unity开发过程中,如果要调用Android端的java方法,恰巧该方法的参数是可变参数或者数组,使用unity的AndroidJavaObject提供的call方法直接传递c#数组,是需要对数组参数做一下处理。举例说明:
java方法如下:
unity c#调用时,需要把传入的参数数组转化成一个AndroidJavaObject,然后再调用AndroidJavaObject提供的call方法。
参考: https://stackoverflow.com/questions/42681410/androidjavaobject-call-array-passing-error-unity-for-android
㈥ android怎么在array配置文件中添加图片资源数组
Android R.array是提取XML资源文件中String数组的方法。
1. R.array的提供代码:
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<string-arrayname="city">
<item>厦门市</item>
<item>福州市</item>
<item>泉州市</item>
<item>漳州市</item>
<item>龙岩市</item>
</string-array>
</resources>
2.代码中数组的提供方式:
Resources res =getResources();
String[] city=res.getStringArray(R.array.city);
3.图片数组,需要在drawable目录下创建一个animation.xml
<?xmlversion="1.0"encoding="utf-8"?>
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true">
<itemandroid:drawable="@drawable/icon1"android:ration="150"></item>
<itemandroid:drawable="@drawable/icon2"android:ration="150"></item>
<itemandroid:drawable="@drawable/icon3"android:ration="150"></item>
<itemandroid:drawable="@drawable/icon4"android:ration="150"></item>
<itemandroid:drawable="@drawable/icon5"android:ration="150"></item>
<itemandroid:drawable="@drawable/icon6"android:ration="150"></item>
</animation-list>
4.提取方式直接在layout中android:src="@drawable/animation" 即可引用。
㈦ Android Okhttp/Retrofit网络请求加解密实现方案
比较安全的方案应该是AES+RSA的加密方式。具体如下图所示。
为什么要这样做呢?
1、RSA是非对称加密,公钥和私钥分开,且公钥可以公开,很适合网络数据传输场景。但RSA加密比较慢,据说比AES慢100倍,且对加密的数据长度也有限制。
2、AES是对称加密,加密速度快,安全性高,但密钥的保存是个问题,在网络数据传输的场景就很容易由于密钥泄露造成安全隐患
3、所以,AES+RSA结合才更好,AES加密数据,且密钥随机生成,RSA用对方(服务器)的公钥加密随机生成的AES密钥。传输时要把密文,加密的AES密钥和自己的公钥传给对方(服务器)。对方(服务器)接到数据后,用自己的私钥解密AES密钥,再拿AES密钥解密数据得到明文。这样就综合了两种加密体系的优点。
4、除上面说的外,还可以加签名,即对传输的数据(加密前)先做个哈希,然后用自己的RSA私钥对哈希签名(对方拿到自己的公钥可以验签),这样可以验证传输内容有没有被修改过。
就java来说,加密的输入和输出都是字节数组类型的,也就是二进制数据,网络传输或本地保存都需要重新编码为字符串。推荐使用Base64。Android 有自带的Base64实现,flag要选Base64.NO_WRAP,不然末尾会有换行影响服务端解码。
Android中Base64加密
总而言之,这些不同语言都有实现库,调用即可,关键是参数要一致,具体还需要和后台联调一下。
rsa加解密的内容超长的问题解决
现在说到网络框架,应该毫无疑问是Retrofit了。上面说的加密方案说到底还是要在网络请求框架内加上,怎么做入侵最小,怎么做最方便才是重点。
1、坑定不能直接在接口调用层做加密,加参数,这样每个接口都要修改,这是不可能的。
2、ConverterFactory处理,这也是网上可以搜到的很多文章的写法,但我觉得还是有入侵。而且有点麻烦。
3、OkHttp添加拦截器,这种方法入侵最小(可以说没有),实现呢也非常优雅。
下面的实现,网上也找不到多少可以参考的文章,但不得不说,OkHttp的封装和设计真的很好用,所见即所得。看下源码,就知道该怎么用了,连文档都不用查。
主要注意点:
0、和接口无关的新加的数据放在请求头里。
1、该close的要close,不然会内存泄漏。
2、新旧Request和Response要区分好,新的要替换旧的去传递或返回。
3、要对response.code()做处理,只有在和后台约定好的返回码下才走解密的逻辑,具体看自己的需求,不一定都是200。
㈧ android 怎么上传一个String数组
上传String数组可以将其转换成string类型,每个数组元素之间添加一个你自己定义的 分隔符 比如“| #$”等。用socket或http上传。
很多时候 安卓与服务商交互 较多采用的数据格式是 JSON 和 XML。可以将其 包装为JSON 格式。JSON 格式比较简单。
JSON 工具类有 GSON android也自带Json包,可以方便使用,String数组转成JsonArray 再上传就行了。