永发信息网

android http协议可以上传对象吗

答案:1  悬赏:30  手机版
解决时间 2021-01-09 13:23
android http协议可以上传对象吗
最佳答案
网上介绍Android上http通信的文章很多,不过大部分只给出了实现代码的片段,一些注意事项和如何设计一个合理的类用来处理所有的http请求以及返回结果,一般都不会提及。因此,自己对此做了些总结,给出了我的一个解决方案。首先,需要明确一下http通信流程,Android目前提供两种http通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient相对来讲更大更全能,但是速度相对也要慢一点。在此只介绍HttpClient的通信流程:1work;import java.ConnectivityManager;import android.os.Handler;import android.util.Log;public class PostRequest implements Runnable { private static final int NO_SERVER_ERROR=1000; //服务器地址 public static final String URL = "fill your own url"; //一些请求类型 public final static String ADD = "/add"; public final static String UPDATE = "/update"; public final static String PING = "/ping"; //一些参数 private static int connectionTimeout = 60000; private static int socketTimeout = 60000; //类静态变量 private static HttpClient httpClient=new DefaultHttpClient(); private static ExecutorService executorService=Executors.newCachedThreadPool(); private static Handler handler = new Handler(); //变量 private String strResult; private HttpPost httpPost; private HttpResponse httpResponse; private OnReceiveDataListener onReceiveDataListener; private int statusCode; public PostRequest() { strResult = null; httpResponse = null; httpPost = new HttpPost(); } public void setOnReceiveDataListener(OnReceiveDataListener listener) { onReceiveDataListener = listener; } public void iniRequest(String requestType, JSONObject jsonObject) { httpPost.addHeader("Content-Type", "text/json"); httpPost.addHeader("charset", "UTF-8"); httpPost.addHeader("Cache-Control", "no-cache"); HttpParams httpParameters = httpPost.getParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, connectionTimeout); HttpConnectionParams.setSoTimeout(httpParameters, socketTimeout); httpPost.setParams(httpParameters); try { httpPost.setURI(new URI(URL + requestType)); httpPost.setEntity(new StringEntity(jsonObject.toString(), HTTP.UTF_8)); } catch (URISyntaxException e1) { e1.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } public void execute() { executorService.execute(this); } public static boolean checkNetState(Activity activity) { ConnectivityManager connManager = (ConnectivityManager) activity .getSystemService(Context.CONNECTIVITY_SERVICE); if (connManager.getActiveNetworkInfo() != null) { return connManager.getActiveNetworkInfo().isAvailable(); } return false; } @Override public void run() { httpResponse = null; try { httpResponse = httpClient.execute(httpPost); strResult = EntityUtils.toString(httpResponse.getEntity()); } catch (ClientProtocolException e1) { strResult = null; e1.printStackTrace(); } catch (IOException e1) { strResult = null; e1.printStackTrace(); } finally { if (httpResponse != null) { statusCode = httpResponse.getStatusLine().getStatusCode(); } else { statusCode=NO_SERVER_ERROR; } if(onReceiveDataListener!=null) { //将注册的监听器的onReceiveData方法加入到消息队列中去执行 handler.post(new Runnable() { @Override public void run() { onReceiveDataListener.onReceiveData(strResult, statusCode); } }); } } } public interface OnReceiveDataListener { public abstract void onReceiveData(String strResult,int StatusCode); }}代码使用了观察者模式,任何需要接收http请求结果的类,都要实现OnReceiveDataListener接口的抽象方法,同时PostRequest实例调用setOnReceiveDataListener方法,注册该监听器。完整调用步骤如下:1.创建PostRequest对象,实现onReceiveData接口,编写自己的onReceiveData方法2.注册监听器3.调用PostRequest的iniRequest方法,初始化本次request4.调用PostRequest的execute方法可能的改进:1.如果需要多个观察者,可以把只能注册单个监听器改为可以注册多个监听器,维护一个监听器List。2.如果需求比较简单,并希望调用流程更简洁,iniRequest和execute可以合并
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一般建行商业房贷利率是多少
sem推广方案如何写
冬天养生禁忌有哪些 男女早上急着做这事必
坦克世界430学灭火几秒能灭
请问翻毛皮怎么锁边?
朱元璋为什么每次打仗前都将将士们的妻子聚在
上海县和闵行区合并后,为何不叫上海区?而改
红色润滑脂是什么润滑脂
34.It took the early settlers more than 1
这些古钱有没有收藏价值
35加99乘88加53等于多少。写过程
我喜亦我悲,我悲亦我恸是什么意思
请问凭伤残是要到三个月后才能鉴定吗?
汪洋中一叶扁舟是什么意思
求绅士道的帐号,也就是e站帐号。要能用的
推荐资讯
单选题下列关于真核生物转录和翻译的比较错误
孢子有大结局吗?
冯老师用600元钱买了3盒钢笔,每盒有5支。李
033是指谁
邯郸学步的道理
为什么包拯用不同的铡刀铡人判案
With masses of homework , I can hardly spa
求《僵尸七日重生》高清完整版,完整版!!!
王哲林年龄已经被爆了 郭艾伦呢 是假年龄么
不同蛋白质氨基酸序列相似但碱基顺序差异大,
dxp 软件无法打开
稷山县哪里电话手表在哪买
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?