Nohttp中的get和post使用

Nohttp类似于volley的升级版,其使用步骤基本一致

特点:
1.多种请求方式并发调用,支持get,post,put等网络解析方式
2.文件上传,文件下载,下载进度回调,错误回调,支持暂停继续下载,支持取消大文件上传,不会发生OOM,支持File,InputStream,ByteArray,Bitmap,实现NOhttp的
Binary接口,理论上任何东西都可以穿,
3.支持取消某个请求,取消指定多个请求,取消所有请求
4.支持自定义Request,利用NOhttp泛型可以解析成你想要的任何数据格式(String,Json,JavaBeann,XML,Bitmap)
5.异步请求,拿到结果直接更新UI,支持同步请求.

1. 进行关联
AndroidStudio使用方式

如果使用HttpURLConnection作为网络层:
compile 'com.yolanda.nohttp:nohttp:1.1.0'
如果要使用OkHttp作为网络层,请再依赖:
compile 'com.yanzhenjie.nohttp:okhttp:1.1.0'

2. 权限

<读取外部存储>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    

<写入外部存储>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<网络权限>

<uses-permission android:name="android.permission.INTERNET" />  

<访问网络状态>                                  

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<访问无线网络状态>            

<uses-permission android:name="android.permission. ACCESS_WIFI_STATE" />

3. 使用NOhttp进行网络请求.
    新建一个队列用来添加消息请求,可以并发多个消息请求,默认为3个
    发送消息请求,并添加到队列

    设置结果回调监听,对请求结果进行统一处理

4Nohttp.流程图

  

添加依赖包,首先找到Gradle Scripts中找到build.gradle,必须选择(Module:app),找到以后将依赖包:compile 'com.yolanda.nohttp:nohttp:1.1.0'   粘贴到dependencies

参照:

   

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    compile 'com.yolanda.nohttp:nohttp:1.1.0'
    testCompile 'junit:junit:4.12'
}

java布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="btn_get"
        android:text="get方式获取网络数据"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="btn_post"
        android:text="post方式获取网络数据"/>

    <ScrollView
        android:id="@+id/SV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </ScrollView>

</LinearLayout>
Nohttp初始化需要一个Context,最好在 ApplicationonCreate()中初始化,记得在 manifest.xml中注册 Application

初始化:创建一个MyApplicatin类继承Application,实现onCreate()方法,然后进行初始化

    

public class MyApplication extends Application{
    @Override
    public void onCreate() {
        //NoHttp默认初始化
        NoHttp.initialize(this);
        super.onCreate();
    }
}

注册:打开AndroidMainfest.xml,在application里进行注册

 

Java代码使用Nohttp的getpost的两种方式

 提示:如果使用post请求,注意进行数据的add添加,上传数据

首先初始化控件:

public class MainActivity extends AppCompatActivity {

    private TextView mMtv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMtv = (TextView) findViewById(R.id.tv);
    }

get()方法:

get是从服务器上获取数据,如果这些数据是中文数据而且是非敏感数据,那么使用 get


 public void btn_get(View view) {
        //使用Nohttp进行网络访问的网址
        String url = "http://www.baidu.com";
        //1.创建一个队列
        RequestQueue queue = NoHttp.newRequestQueue();
        //2.创建消息请求,参数1 String字符串,传网址  参数2:指定请求的方式
        //提示:(你们请求的数据是什么类型,就调用对象的方法,主要是中间的单词有区别)
        Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
        //3.利用队列去添加消息队列     参数1:请求的标识    参数2:消息请求对象  参数3:请求的回调的监听
        //请求可以并发,统一处理响应结果
        queue.add(0, request, new OnResponseListener<String>() {
            //请求开始时回调的方法,一般做进度条对话框的加载
            @Override
            public void onStart(int what) {

            }

            //请求成功,回调的方法,代码直接运行到主线程
            @Override
            public void onSucceed(int what, Response<String> response) {
                //获取的响应结果,设置到TextView进行展示
                String result = response.get();
                mMtv.setText(result);
            }

            //网络请求失败的回调
            @Override
            public void onFailed(int what, Response<String> response) {
                Toast.makeText(MainActivity.this, "您的网络故障,请及时修复,在尝试", Toast.LENGTH_SHORT).show();
            }

            //网络请求成功,一般隐藏进度条对话框
            @Override
            public void onFinish(int what) {

            }
        });
    }

post()方法;

post是向服务器传送数据,如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。


//根据点击事件,执行Nohttp的post方式
    public void btn_post(View view) {
        String postUrl = "http://192.168.3.107:8080/web/LoginServlet";
        //1.创建一个队列
        RequestQueue queue = NoHttp.newRequestQueue();
        //2.创建消息请求   参数1:String字符串,传网址  参数2:请求方式
        Request<String> request = NoHttp.createStringRequest(postUrl, RequestMethod.POST);
        //3.利用队列去添加消息请求
        //使用request对象添加上传的对象添加键与值,post方式添加上传的数据
        request.add("qq", "10000");
        request.add("pwd", "abcde");
        queue.add(1, request, new OnResponseListener<String>() {
            @Override
            public void onStart(int what) {

            }

            @Override
            public void onSucceed(int what, Response<String> response) {
                mMtv.setText(response.get());
            }

            @Override
            public void onFailed(int what, Response<String> response) {
                Toast.makeText(MainActivity.this, "您的网络故障,请及时修复,在尝试", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFinish(int what) {

            }
        });
    }
}




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NoHttp 是专门做Android网络请求与下载的框架。支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载;支持304缓存,302/303重定向,支持代理服务器。NoHttp特性:支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载,上传下载均有进度。支持304缓存,自定义缓存,302/303重定向,支持代理服务器访问地址(如: Google)。NoHttp是队列,自动为请求排队,可以取消指定请求, 可以取消队列所有请求,亦可以停止队列。支持请求String、Bitmap、Json、JavaBean,可自定义扩展请求类型。Request对象包涵参数、文件、请求头等;Response对象包涵响应内容,响应头等信息,Cookie。使用Gradle构建时添加依赖:// 引用最新版 compile 'com.yolanda.nohttp:nohttp: ' // 或则引用指定版本 compile 'com.yolanda.nohttp:nohttp:1.0.0'一. 请求1.请求String数据// 请求对象 Request request = NoHttp.createStringRequest(url, requestMethod); //添加请求头 request.addHeader("AppVersioin", "2.0"); // 添加请求参数 request.add("userName", "yolanda"); //上传文件 request.add("file", new FileBinary(file)); ...2.请求Json数据// JsonObject Request request = NoHttp.createJsonObjectRequest(url, reqeustMethod); queue.add(what, request, responseListener); … // JsonArray Request request = NoHttp.createJsonArrayRequest(url, reqeustMethod); queue.add(what, request, responseListener);3. 请求Bitmap数据Request request = NoHttp.createImageRequest(url, requestMethod); ...4. 取消请求取消单个请求Request request = NoHttp.createStringRequest(url); ... request.cancel();从队列取消指定的请求Request request = NoHttp.createStringRequest(url); request.setCancelSign(sign); … queue.cancelBySign(sign);取消队列所有请求queue.cancelAll();停止队列RequestQueue queue = NoHttp.newRequestQueue(); ... queue.stop();5. 同步请求// 在当前线程发起请求,在线程这么使用 Request request = NoHttp.createStringRequest(url); Response response = NoHttp.startRequestSync(request); if (response.isSucceed()) {     // 请求成功 } else {     // 请求失败 }二. 缓存1. Http标准协议的缓存,比如响应码是304时现在很多公司使用了RESTFUL风格来写Http API,所以这个是必须有的。Request request = NoHttp.createJsonObjectRequest(url); // NoHttp本身是RESTFUL风格的标准Http协议,所以这里不用设置或者设置为DEFAULT request.setCacheMode(CacheMode.DEFAULT); ...2. 当请求服务器失败的时候,读取缓存Request request = NoHttp.createJsonObjectRequest(url); // 非标准Http协议,改变缓存模式为REQUEST_FAILED_READ_CACHE request.setCacheMode(CacheMode.REQUEST_FAILED_READ_CACHE); ...3. 如果发现有缓存直接成功,没有缓存才请求服务器我们知道ImageLoader的核心除了内存优化外,剩下一个就是发现把内地有图片则直接使用,没有则请求服务器,所以NoHttp这一点非常使用做一个ImageLoader。Request request = NoHttp.createJsonObjectRequest(url); // 非标准Http协议,改变缓存模式为IF_NONE_CACHE_REQUEST request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST); ...请求图片,缓存图片。// 如果没有缓存才去请求服务器,否则使用缓存,缓存图片演示 Request request = NoHttp.createImageRequest(imageUrl); request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST); ...4. 仅仅读取缓存Request request = NoHttp.createJsonObjectRequest(url); // 非标准Http协议,改变缓存模式为ONLY_READ_CACHE request.setCacheMode(CacheMode.ONLY_READ_CACHE); ...注意:缓存不管是String、Json、图片还是任何请求都可以被NoHttp缓存二、响应OnResponseListener responseListener = new OnResponseListener() {     @Override     public void onStart(int what) {         // 请求开始时,可以显示一个Dialog     }     @Override     public void onFinish(int what) {         // 请求接受时,关闭Dialog     }     @Override     public void onSucceed(int what, Response response) {         // 接受请求结果         String result = response.get();         // Bitmap imageHead = response.get(); // 如果是bitmap类型,都是同样的用法     }     @Override     public void onFailed(int what, String url, Object tag, Exception exception, ...) {         // 请求失败或者发生异常         // 这里根据exception处理不同的错误,比如超时、网络不好等     } };三. 自定义请求类型: FastJsonRequest1.定义请求对象public class FastJsonRequest extends RestRequestor { public FastJsonRequest(String url) {     super(url); } public FastJsonRequest(String url, RequestMethod requestMethod) {     super(url, requestMethod); } @Override public JSONObject parseResponse(String url, Headers headers, byte[] responseBody) {     String result = StringRequest.parseResponseString(url, headers, responseBody);     JSONObject jsonObject = null;     if (!TextUtils.isEmpty(result)) {         jsonObject = JSON.parseObject(result);     } else {         // 这里默认的错误可以定义为你们自己的数据格式         jsonObject = JSON.toJSON("{}");     }     return jsonObject; } @Override public String getAccept() {     // 告诉服务器你接受什么类型的数据, 会添加到请求头的Accept     return "application/json;q=1"; } }2.使用自定义请求-和NoHttp默认请求没有区别Request mRequest = new FastJsonRequest(url, requestMethod); queue.add(what, mRequest, responseListener);五. 下载文件发起下载请求//下载文件 downloadRequest = NoHttp.createDownloadRequest(url, fielDir, fileName, true, false); // what 区分下载 // downloadRequest 下载请求对象 // downloadListener 下载监听 CallServer.getDownloadInstance().add(0, downloadRequest, downloadListener);暂停或者停止下载downloadRequest.cancel();监听下载过程private DownloadListener downloadListener = new DownloadListener() {     @Override     public void onStart(int what, boolean resume, long preLenght, Headers header, long count) {     }     @Override     public void onProgress(int what, int progress, long downCount) {         // 更新下载进度     }     @Override     public void onFinish(int what, String filePath) {     }     @Override     public void onDownloadError(int what, StatusCode code, CharSequence message) {     }     @Override     public void onCancel(int what) {     } }; 标签:NoHttp

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值