当前位置:首页 » 安卓系统 » android网络请求

android网络请求

发布时间: 2022-02-14 23:10:19

① 安卓开发网络请求是怎么做的异步

安卓限制了发网络请求只能在子线程,不然会报错的!如果你是用asynHttpClient这类框架的话,它会将你的请求放在队列里,通过线程池来发出请求的,也就是说里面会自己开启子线程请求。
如果使用UrHttpConnection或HttpClient的话,就需要自己手动开启子线程进行请求!
下面举两个方法:
第一,new Thread发出请求,handler进行通讯!
第二,asynTask进行异步请求,重写方法进行UI更新!

② 一段安卓处理网络请求的代码,麻烦给解释一下,尽量详细一些

Handler用于接收发送的消息 ,和处理结果
进行网络请求后, 可能有如下几个状态需要处理
超时:MSG_NET_TIMEOUT:

网络错误:MSG_NET_STATUS_ERROR:

成功:MSG_NET_SUCC

通过handler发送如上消息, 并附带可能的数据
Message msg = new Message();
msg.obj = data; //data即数据
msg.what = MSG_NET_SUCC; //根据网络返回不同结果
mHandler.sendMessage(msg);//发送

Handler接到消息后, 通过handleMessage(Message msg)即进行不同的处理
这里超时和网络错误不做任何动作
成功对返回的结果进行JSON解析

③ 如何监控android网络请求

可以利用相关安全软件来监控,如果有ROOT权限更好。首推LBE安全大师,你的采纳就是对我的肯定

④ android网络请求的几种方式有哪些有什么不同

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

java.net包中的HttpURLConnection类

Get方式:

// Get方式请求
public static void requestByGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建一个URL对象
URL url = new URL(path);
// 打开一个HttpURLConnection连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 设置连接超时时间
urlConn.setConnectTimeout(5 * 1000);
// 开始连接
urlConn.connect();
// 判断请求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 获取返回的数据
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");
Log.i(TAG_GET, new String(data, "UTF-8"));
} else {
Log.i(TAG_GET, "Get方式请求失败");
}
// 关闭连接
urlConn.disconnect();
}

Post方式:

// Post方式请求
public static void requestByPost() throws Throwable {
String path = "https://reg.163.com/logins.jsp";
// 请求的参数转换为byte数组
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
byte[] postData = params.getBytes();
// 新建一个URL对象
URL url = new URL(path);
// 打开一个HttpURLConnection连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 设置连接超时时间
urlConn.setConnectTimeout(5 * 1000);
// Post请求必须设置允许输出
urlConn.setDoOutput(true);
// Post请求不能使用缓存
urlConn.setUseCaches(false);
// 设置为Post请求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
// 配置请求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
// 开始连接
urlConn.connect();
// 发送请求参数
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
// 判断请求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 获取返回的数据
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");
Log.i(TAG_POST, new String(data, "UTF-8"));
} else {
Log.i(TAG_POST, "Post方式请求失败");
}
}

org.apache.http包中的HttpGet和HttpPost类

Get方式:

// HttpGet方式请求
public static void requestByHttpGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建HttpGet对象
HttpGet httpGet = new HttpGet(path);
// 获取HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
// 获取HttpResponse实例
HttpResponse httpResp = httpClient.execute(httpGet);
// 判断是够请求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 获取返回的数据
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpGet方式请求失败");
}
}

Post方式:

// HttpPost方式请求
public static void requestByHttpPost() throws Exception {
String path = "https://reg.163.com/logins.jsp";
// 新建HttpPost对象
HttpPost httpPost = new HttpPost(path);
// Post参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "helloworld"));
params.add(new BasicNameValuePair("pwd", "android"));
// 设置字符集
HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
// 设置参数实体
httpPost.setEntity(entity);
// 获取HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
// 获取HttpResponse实例
HttpResponse httpResp = httpClient.execute(httpPost);
// 判断是够请求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 获取返回的数据
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpPost方式请求失败");
}
}

以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。

⑤ android中网络请求中页面关闭了会怎么样

把你要做的东西,比如从服务器拿数据,从数据库拿数据,界面重绘等,写在一个方法里面,在onResume方法调用你这个方法。要不要用线程根据实际情况判断,注意非UI Thread不能直接操作界面

⑥ Android将所有网络请求及逻辑都放在Service中处理是否合适

不太合适,所有的都写在一个地方,显得代码臃肿,不好维护,最好分层():网络请求只负责请求数据(c),对于数据处理的逻辑判断,放到逻辑层(m),然后,对于页面展示的放到activity里面刷新视图即可,这里只负责接收数据后刷新界面,不做任何判断逻辑(v)。。。相当于mvc模式。

⑦ android怎么让网络请求延迟

手机的网络肯定需要考虑延迟了。可以使用wifi进行测试。不过想真正上线产品,需要考虑2G网络的延迟。

⑧ android网络请求数据是同步还是异步

异步请求,因为UI线程(主线程)不允许有5秒以上的耗时操作.在主线程网络请求会导致阻塞,看起来程序就像假死了一样.所以都是异步请求.

⑨ android 网络请求数据一般写在哪

在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果。

其主要特征如下:

■处理异步Http请求,并通过匿名内部类处理回调结果
■Http请求均位于非UI线程,不会阻塞UI操作
■通过线程池处理并发请求
■处理文件上传、下载
■响应结果自动打包JSON格式
■自动处理连接断开时请求重连
使用android-async-http也非常简单,到官网下载依赖jar包,导入工程中libs文件夹下并添加到工程路径即可。

⑩ Android第一次网络请求非常慢,之后都非常快!

你这个问题真是高端
我建议你换一个浏览器比如说猎豹浏览器
再回来说话

热点内容
开源库编译管理员 发布:2025-02-06 09:39:14 浏览:914
脸书怎么注册安卓 发布:2025-02-06 09:36:47 浏览:381
车用安卓导航无线打不开什么原因 发布:2025-02-06 09:27:50 浏览:790
安卓与苹果如何互相传送文件 发布:2025-02-06 09:27:40 浏览:26
华为服务器盘符如何分配 发布:2025-02-06 09:26:41 浏览:560
传奇h5源码下载 发布:2025-02-06 09:26:06 浏览:78
编译uclibc 发布:2025-02-06 09:09:04 浏览:152
用gcc编译16位汇编 发布:2025-02-06 09:06:07 浏览:823
什么低端安卓手机不卡 发布:2025-02-06 09:03:32 浏览:14
我的世界服务器卡领地 发布:2025-02-06 08:50:45 浏览:256