android中Http类的封装

安卓开发:OKHTTP的封装代码--Httplib 1.0(适用于各类比赛) Httplibs是一个基于OkHttp的Android网络请求封装库。它简化了OkHttp的使用,提供了更加便捷、灵活的API接口,适用于各类Android开发比赛和项目。尤其是移动应用开发大赛,该库旨在帮助开发者更加高效地处理网络请求,减少重复代码,提高开发效率。 阅读详情

原文地址
http://datuo.iteye.com/blog/1094994
运行效果:
这里写图片描述
这篇主要是对http网络请求的总结。
http的封装:

  1. 在httpConnection中配置一些连接属性,向handler发送数据。
  2. ConnectionManager中开启线程,进行网络链接。
  3. HttpHandler接收返回的数据并处理。
    在activity中的代码:
public class MainActivity extends Activity {
    private Button button_get;
    private TextView textview;
    // 获取北京天气json数据;
    private static final String url_bj = "http://m.weather.com.cn/atad/101010100.html";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button_get = (Button) findViewById(R.id.bt_get);
        textview = (TextView) findViewById(R.id.textview);
        button_get.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                new HttpConnection(handler).get(url_bj);
            }
        });
    }

    private Handler handler = new HttpHandler(MainActivity.this) {
        //正在加载中;
        @Override
        protected void onLoading() {
            // TODO Auto-generated method stub
            textview.setText("正在加载中...");
        }
        //请求成功后返回的数据;
        @Override
        protected void onSuccess(JSONObject jObject) {
            // TODO Auto-generated method stub
            if (jObject != null) {
                textview.setText(jObject.toString());
            }
        }
        //返回数据失败的回调;
        @Override
        protected void onFailure(JSONObject jObject) {
            // TODO Auto-generated method stub
            textview.setText(jObject + "");
        }

    };

}

HttpHandler代码,httphandler一个抽象类:onSucess()和onFailure()
两个抽象方法。处于不同状态,返回不同的回调。

public abstract class HttpHandler extends Handler {
    public static final int STATE_START = 0;
    public static final int STATE_ERROR = 1;
    public static final int STATE_SUCCEED = 2;
    private Context context;

    public HttpHandler(Context context) {
        this.context = context;
    }
    //正在连接中
    protected abstract void onLoading();
    //数据返回成功;
    protected abstract void onSuccess(JSONObject jObject);
    //连接失败;
    protected abstract void onFailure(JSONObject jObject);
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        switch (msg.what) {
        case STATE_START:
            onLoading();
            break;
        case STATE_SUCCEED:
            Object obj = msg.obj;
            if (obj != null) {
                try {
                    JSONObject json = new JSONObject(obj.toString());
                    onSuccess(json);
                } catch (JSONException e) {
                    onSuccess(null);
                }
            }
        case STATE_ERROR:
            Object e = msg.obj;
            if (e != null) {
                JSONObject json;
                try {
                    json = new JSONObject(e.toString());
                } catch (JSONException e1) {
                    // TODO Auto-generated catch block
                    onFailure(null);
                }
            }
            break;
        }
    }
}

HttpConnection配置get,post等请求。然后发送handler。

public class HttpConnection implements Runnable {
    private static final int GET = 0;
    private static final int POST = 1;
    private static final int PUT = 2;
    private static final int DELETE = 3;
    private static final int BITMAP = 4;

    private String url;
    private int method;
    private Handler handler;
    private List<NameValuePair> data;

    private HttpClient httpClient;

    public HttpConnection() {
        this(new Handler());
    }

    public HttpConnection(Handler handler) {
        // TODO Auto-generated constructor stub
        this.handler = handler;
    }

    public void create(int method, String url, List<NameValuePair> data) {
        this.method = method;
        this.url = url;
        this.data = data;
        ConnectionManager.getInstance().push(this);
    }

    public void get(String url) {
        create(GET, url, null);
    }

    public void post(String url, List<NameValuePair> data) {
        create(POST, url, data);
    }

    public void put(String url, List<NameValuePair> data) {
        create(PUT, url, data);
    }

    public void delete(String url) {
        create(DELETE, url, null);
    }

    public void bitmap(String url) {
        create(BITMAP, url, null);
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        handler.sendMessage(Message.obtain(handler, HttpHandler.STATE_START));
        httpClient = new DefaultHttpClient();
        HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 6000);
        try {
            HttpResponse response = null;
            switch (method) {
            case GET:
                HttpGet httpGet = new HttpGet(url);
                response = httpClient.execute(httpGet);
                break;

            case POST:
                HttpPost httpPost = new HttpPost();
                httpPost.setEntity(new UrlEncodedFormEntity(data, HTTP.UTF_8));

                break;
            case PUT:
                HttpPut httpPut = new HttpPut(url);
                httpPut.setEntity(new UrlEncodedFormEntity(data, HTTP.UTF_8));
                response = httpClient.execute(httpPut);
                break;
            }
            if (method < BITMAP) {
                processEntity(response.getEntity());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            handler.sendMessage(Message.obtain(handler,
                    HttpHandler.STATE_ERROR, e));
        }
        ConnectionManager.getInstance().didComlete(this);

    }

    private void processEntity(HttpEntity entity) throws IllegalStateException,
            IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(
                entity.getContent()));
        String line, result = "";
        while ((line = br.readLine()) != null)
            result += line;
        Message message = Message.obtain(handler, HttpHandler.STATE_SUCCEED, result); 
        handler.sendMessage(message);
    }

}

demo下载地址http://download.youkuaiyun.com/detail/androidxiaogang/9215257

CAN总线错误帧全解析:从数据包到硬件层的故障树分析 本文深入解析CAN总线错误帧的故障树分析方法,从数据包到硬件层全面剖析错误机制。通过物理层信号测试、数据链路层错误解码和应用层协议排查,提供系统化的诊断框架。结合CANoe配置和示波器波形分析,帮助工程师快速定位总线故障,提升系统可靠性。 阅读详情

相关推荐

解决windows10下无法安装.net framework 3.5(包括.net2.0和3.0)

入域电脑,win10系统中安装 .net framework 3.5(包括.net2.0和3.0)

God_me_1的博客 4万+

android 的http封装

package okhttp; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Looper; import android.text.TextUtils;...

weixin_43492777的博客 543

comsol-声学

COMSOL多物理场仿真软件以高效的计算性能和杰出的多场耦合分析能力实现了精确的数值仿真,已被广泛应用于各个领域的科学研究以及工程计算,为工程界和科学界解决了复杂的多物理场建模问题。COMSOL内嵌的声学模块可以方便地进行多孔声学和粘热声学的模拟仿真。软件数值计算得到的云图,可以将声压、速度、声强以及声能耗散等结果可视化,十分有利于学生对声学的学习和理解。将COMSOL仿真引入实验当中,通过软件的可视化处理有效直观的展示复杂物理场和集合模型仿真的流程,与实验数据结合,使得文章内容具有说服力、预见性和新颖性。

y2715163545的博客 2376

android http封装类,HTTP封装类 工具类 For Android

================2013 04 10 解决2.1 认证问题package com.su.funycard.util;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io...

weixin_42502382的博客 353

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8123

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3189

封装android http框架

目前有几个开源的android http框架,比如volley、android-async-http,对于初学者来说听上去可能很高大上,实际就是对常用的网络请求代码做了一下封装,看过一套框架源码以后就会感觉没那么复杂,我们完全可以自己封装一个http框架。需求分析: 1. 支持http协议:GET、POST、PUT、DELETE 2. 支持apache的HttpClient和原生的HttpURL

AndroidConqueror的博客 903

Windows10环境下激活虚拟环境报错【source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称】

在使用Django创建Web程序前,需要创建一个虚拟的工作环境,在使用【source ll_env/bin/activate】命令激活虚拟环境时报错:source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 2。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

android http:网络请求二次封装的框架设计

在开发中一般都会用到网络请求,那有没有必要对网络请求进行封装呢?我觉得有必要 我就说说我使用网络请求的过程吧。算是一个编程思想的交流。如果和你的想法有不一致的,可以留言交流。 刚开始接触编程的时候,遇到网络请求,使用起来很直接,毕竟在自己的眼里只有get请求啊,post请求啊。 01 作为编程萌新的我,哪里需要网络请求就在那里调用。 主要操作就是,自己写一个网络请求,在需要它的地方去调用。这样写有个很大的缺点:一旦你网络请求被修改或者被弃用,那你修改的地方就可能很多。 .

vipStone2的博客 1608

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

perseverance51博客 2893

第78章:PCL Multiple View ICP 多视角配准

多视角配准(Multiple View ICP)是迭代最近点(ICP)算法的扩展,旨在处理多视角的点云数据配准问题。传统的ICP算法主要用于两幅点云之间的配准,而多视角配准则处理来自多个视角或不同时间采集的多个点云数据的配准任务。在实际应用中,多个传感器或多个拍摄角度获得的点云数据常常需要进行联合配准。这些点云可能由于不同的视角、拍摄位置或时间差异而存在位置和旋转的差异。多视角配准的目标是根据多个点云之间的匹配关系,找到它们的相对变换,使得这些点云能够合并成一个统一的三维模型。

yumeiguo的博客 158

Android中Http请求类的封装

Android中Http请求类的封装 在Android的网络开发中,会常用到Http请求,为了避免代码的重复编写,我们要学会封装一个Http请求类。 方法1: public class Network { public String makeHttpRequest(String url, List params) { try{ ............. }catch

u010507199的专栏 600

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android封装HttpURLConnection类的自定义HTTP请求方法

  在Android开发过程中,我们经常会遇到调用后台服务的情况。目前我手上进行的项目,后台服务基本上基于.NET环境开发的,开发语言是C#。服务一般是供前端AJAX请求调用。   而在Android中,我们也可以通过HTTP请求访问类似的服务,主要请求方法都是GET或者POST,并且POST请求包含了冗长的参数。因此我自己封装了GET和POST的HTTP请求的方法,POST请求参数通过输入流写...

weixin_30302609的博客 191

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android http封装类,android 封装Http请求的帮助类

整理好的帮助类,注意Post请求使用编码我用的是utf-8/** * This class is used for : http request helper * * @author limengxiao * @version * 1.0 ${2016_4_24} ${23:58} */ package com.example.lmxhttpclie...

weixin_35711352的博客 195

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android入门:封装一个HTTP请求的辅助类

前面的文章中,我们曾经实现了一个HTTP的GET 和 POST 请求; 此处我封装了一个HTTP的get和post的辅助类,能够更好的使用; 类名:HttpRequestUtil 提供了如下功能: (1)模拟GET请求; (2)模拟POST请求; (3)模拟文件上传请求; (4)发送XML数据; 发送GET请求 (1) public static U

xiazdong 1万+

Android入门 封装一个HTTP请求的辅助类

Android入门 封装一个HTTP请求的辅助类

dtijcfrhb的博客 499

android 封装Http请求的帮助类

整理好的帮助类,注意Post请求使用编码我用的是utf-8 /**   * This class is used for : http request helper  *    * @author limengxiao   * @version    *     1.0 ${2016_4_24} ${23:58}   */   package com.example.lmx

轰炸大鱿鱼的博客 954

java安卓util工具类,Android_Android封装的http请求实用工具类,复制代码 代码如下:import java.io - phpStudy...

import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URLEncoder;import java.security.KeyStore;import java.util.Iterator;import java.util.List;import java.util.Map;import java...

weixin_34891129的博客 150

android http 封装类,封装httpUtil类包括getpost的请求

该楼层疑似违规已被系统折叠隐藏此楼查看此楼public class HttpUtil {//在activity中调用此方法,请求数据,并获取返回的数据;public void getDataFromServer(Context context, RequestBean bean, DataCallBack callBack) {MyHandler handler = new MyHandler(...

weixin_39581571的博客 318
上一篇: xutils获取json并解析
下一篇: android中dialog封装
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值