android网络编程
来源:互联网 发布:淘宝怎么设置全场包邮 编辑:程序博客网 时间:2024/06/05 07:04
android的网络编程以http为主,传输以json为主,服务端以java服务端为主。另外,有使用https或者自定义协议的,传输的也有使用xml的,但是比较少,服务端有使用C#,php等。
android的框架有很多,可以使用AsyncHttp(https://github.com/loopj/android-async-http/)。如果使用这个框架,那么需要用到HttpCore的包。
需要注意,HttpClient是一个非常有用的项目,里面包含了,常用的common-logging,http-core,http-mime等,但是这个是java项目,我们需要使用android版本的,这点需要注意。
如果我们自己使用android自身的类进行编程,那么需要注意,Eclipse中使用的如HttpClient这些类,在android studio中并没有,需要在build.gradle的
android {}中添加
useLibrary 'org.apache.http.legacy'
这个包,其实就在sdk\platforms\android-23\optional\org.apache.http.legacy.jar下。添加了这个包之后,就可以使用httpclient的大多数类了。
需要注意,http协议有一个header头,这个头里面存储这传输什么的信息,而http除了url之外,本身是可以传输信息的,使用entity传输。下面是常规的代码:
package com.seatel.mobilehall.net;import android.util.Log;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicHeader;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URI;import java.net.URISyntaxException;/** * Created by han on 2016/1/27. */public class HttpTool { public String post(String url,JSONObject json) { String result = null; HttpClient client = new DefaultHttpClient(); try { HttpPost post = new HttpPost(new URI(url)); post.setHeader("Content-Type", "application/json"); StringEntity entity = new StringEntity(json.toString(),"utf-8"); entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(entity); HttpResponse httpResponse = client.execute(post); InputStream inStream = httpResponse.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(inStream,"utf-8")); StringBuilder strber = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { strber.append(line); result = strber.toString(); } } catch (URISyntaxException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; }}
package com.seatel.mobilehall.net;import android.content.Context;import android.os.AsyncTask;import android.util.Log;import com.seatel.mobilehall.app.MainActivity;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/** * Created by han on 2016/1/27. */public class HttpTask extends AsyncTask<Void, Void, Boolean> { private String result; private Context context; public HttpTask(Context context) { this.context = context; } @Override protected Boolean doInBackground(Void... params) { try { JSONObject json = new JSONObject(); json.put("cmd", "advert"); result = new HttpTool().post("http://120.24.49.116:8080/rqInvokeController", json); } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPreExecute() { } @Override protected void onPostExecute(Boolean aBoolean) { try { JSONObject response = new JSONObject(result); String code = response.optString("code"); if(code.equals("0")){ JSONArray array = response.optJSONArray("list"); JSONObject obj1 = array.getJSONObject(0); JSONObject obj2 = array.getJSONObject(1); String image1 = obj1.optString("image"); String image2 = obj2.optString("image"); MainActivity activity = (MainActivity) context; activity.imageDisplay(image1); } } catch (JSONException e) { e.printStackTrace(); } }}
以上是常规的http传输json的网络操作。传输的格式如下:
http://120.24.49.116:8080/rqInvokeController{"cmd":"advert"}
分别为url和entity。
如果我们需要传输其他类型的格式,这个时候就用到了httpmime,这点从
HttpPost post = new HttpPost(new URI(url)); post.setHeader("Content-Type", "application/json");声明中知道,上面传输的事json。因此若需要其他格式就需要mime协议,从这个协议的名字可以看出,他其实是在header中声明添加的格式,并且在entity中添加需要的数据entity。对于mime协议中的multiple,在httpmime中,体现为MultipartEntity类,HttpClient.addEntity()方法添加MultipartEntity。
httpmime的详细操作
(未完成)
而如果是https协议的传输,那么跟以上的操作有所不同,
(未完成)
0 0
- Android 的网络编程
- Android 的网络编程
- Android 的网络编程
- Android 的网络编程
- Android 说说网络编程
- Android 的网络编程
- Android网络编程
- 探讨 Android 网络编程
- Android网络编程
- Android 的网络编程
- Android 的网络编程
- Android网络编程
- android之网络编程
- Android网络编程
- Android网络编程
- Android 网络编程应用
- Android 网络编程初步
- android network网络编程
- activaity跳转
- iOS-GCD的学习记录(3)
- 推荐一些很棒的Bootstrap后台模板
- 跨业务实体内部销售订单设定介绍
- oracle 11g 导入表时 提示 ***值太大错误
- android网络编程
- struts2 多文件上傳
- 艾德思奇刚做的架构“大手术”
- 分享几个cocos2d-x游戏源码【一直收集】
- 学习鸟哥的Linux私房菜笔记(12)——系统监视2
- weblogic显示原来ip怎么修改到新的ip
- 忽略细节的代价
- 创建用户表空间授权执行脚本
- 使用expect实现shell自动交互