Http网络请求库框架的使用

1.Volley和Async网络框架的特点
Http网络数据交互请求是极其重要并且使用很频繁的一个模块,也是最基本的网络编程所需要学习的。网络请求方式的效率和性能直接影响到APP的整体用户体验流畅性,所以学习并掌握一款好的Http请求框架对我们的网络开发非常重要。Http请求在移动网络编程中主要是Get和Post请求接口数据的使用。所以,在学习好基础的Http请求知识后,为了提升开发效率,选择学习使用一款好的Http网络请求框架变得非常的重要。
  • 能使网络通信更快,更简单,更健壮
  • Get、Post网络请求及网络图像的高效率异步处理请求
  • 可以对网络请求进行排序优先级管理
  • 网络请求的缓存
  • 多级别取消请求
  • 和Activity生命周期的联动(Activity结束时同时取消所有网络请求)

2.Volley的用法

使用Volley可以简化一些网络通信的开发,当然Volley不适合大数据(large payloads )和流媒体的网络请求。例如上百兆的文件、视频下载。
Volley开源,可以进行定制修改也可以直接使用Jar包的形式。

Volley的Get和Post请求方式的使用
Volley的网络请求队列建立和取消队列请求
Volley有自己的请求队列管理机制,可以控制每个请求的建立与取消。非常方便和安全。这样也就可以做到随时控制某个请求在什么时候结束,Activity生命周期关联,防止无谓的请求。
Get和Post用于与服务器间请求和发送数据。

  • 建立请求首先建立队列,将请求添加到请求队列里。
  • 然后进行相应的Get和Post请求,请求结果在回调里获取解析。

3.Android-async-http的用法
Async-http是一款国外的开源框架,作者是loopj。是基于Apache HttpClient库的。可以方便快速高效的进行网络数据请求和发送,文件下载和上传。
特点:
  • 清晰的网络请求回调
  • 请求使用ThreadPool,限制并发资源使用情况
  • GET / POST基于参数构建使用(RequestParams),方便
  • Multipart 文件上传,大数据上传下载
  • 自动智能请求重试,优化了质量不一的移动连接
  • 内置响应解析成JSON,使用JsonHttpResponseHandler
  • 持久化cookie存储,保存cookie到你的应用程序的SharedPreferences
  • 二进制文件(图片等)的下载,使用BinaryHttpResponseHandler
Android-async-http的Get和Post请求方式的使用
Android-async-http回调逻辑的二次封装
  • 建立请求首先建立请求客户端对象。
  • 然后进行相应的Get和Post请求,请求结果在回调里获取解析。
  • Async-http的Get和Post请求可以基于参数化请求(RequestParams),可以清晰方便的将你的请求参数放到里面,然后进行Get和Post请求
  • Async-http有自己的默认的回调逻辑封装,例如请求成功,请求失败,重试请求等回调。

4.Java代码

package com.gst.user.application;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import java.util.HashMap;
import java.util.Map;

public class VolleyAndAsyncHttpActivity extends AppCompatActivity {
    RequestQueue queue;
    AsyncHttpClient client;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley_and_async_http);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        queue= Volley.newRequestQueue(this);
        client=new AsyncHttpClient();

    }

    public void volley_Get(View view){
        String url="http://apis.juhe.cn/mobile/get?phone=13666666666&key=335adcc4e891ba4e4be6d7534fd54c5d";
        StringRequest request=new StringRequest(Request.Method.GET,url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
                        Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!",
                        Toast.LENGTH_LONG).show();
            }
        });
        request.setTag("volley_get");
        queue.add(request);

        Toast.makeText(VolleyAndAsyncHttpActivity.this,"单击了volley_get",Toast.LENGTH_SHORT).show();

    }

    public void volley_Post(View view){
        String url = "http://apis.juhe.cn/mobile/get?";
        StringRequest request=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
                        Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!",
                        Toast.LENGTH_LONG).show();
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> map=new HashMap<>();
                map.put("phone","18205272296");
                map.put("key","335adcc4e891ba4e4be6d7534fd54c5d");
                return map;
            }
        };
        request.setTag("volley_post");
        queue.add(request);
    }

    public void asyncHttp_get(View view){
        String url = "http://apis.juhe.cn/mobile/get?phone=13666666666&key=335adcc4e891ba4e4be6d7534fd54c5d";
        client.get(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String s) {
                super.onSuccess(s);
                Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(Throwable throwable, String s) {
                super.onFailure(throwable, s);
                Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!" + s,
                        Toast.LENGTH_LONG).show();
            }
        });
    }

    public void asyncHttp_post(View view){
        String url="http://apis.juhe.cn/mobile/get?";
        RequestParams params=new RequestParams();
        params.put("phone","18205272296");
        params.put("key", "335adcc4e891ba4e4be6d7534fd54c5d");
        client.post(url,new AsyncHttpResponseHandler(){
            @Override
            public void onSuccess(String s) {
                super.onSuccess(s);
                Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(Throwable throwable, String s) {
                super.onFailure(throwable, s);
                Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!" + s,
                        Toast.LENGTH_LONG).show();
            }
        });





    }

    @Override
    protected void onStop() {
        queue.cancelAll("volley_post");
        queue.cancelAll("volley_get");
        super.onStop();
    }


}
xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_volley_and_async_http"
    tools:context="com.gst.user.application.VolleyAndAsyncHttpActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="volley_get"
        android:id="@+id/button2"
        android:onClick="volley_Get"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="volley_post"
        android:id="@+id/button3"
        android:onClick="volley_Post"
        android:layout_below="@+id/button2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="34dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="asyncHttp_get"
        android:onClick="asyncHttp_get"
        android:id="@+id/button4"
        android:layout_below="@+id/button3"
        android:layout_alignLeft="@+id/button3"
        android:layout_alignStart="@+id/button3"
        android:layout_marginTop="46dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="asyncHttp_post"
        android:onClick="asyncHttp_post"
        android:id="@+id/button5"
        android:layout_marginTop="52dp"
        android:layout_below="@+id/button4"
        android:layout_alignLeft="@+id/button4"
        android:layout_alignStart="@+id/button4" />
</RelativeLayout>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介: 本框架是在Netroid的基础之上进行了封装,节省了其中配置的过程和一些不必要的操作 主要进行文本请求和图片请求,图片请求都进行了缓存(内存缓存和sd卡缓存)的封装,sd卡缓存时间可自行更改. 文本请求可传入解析的泛型clazz,即可返回解析后的clazz对象进行数据 操作,如果不需要进行数据解析,可通过另一种方式获取原生的string; 单图请求,单图请求可执行对本地asset文件夹,sd卡,http三种请求模式.只需传入相应的路径即可; 多图请求,多图请求主要是针对listview这种图文混排模式而生,能快速加载图片并实现缓存,不需要考虑 图片错位问题.只需传入相应的url即可完成全部功能. 使用说明: 1:在新创建的Manifest.xml中application中申明: <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="com.aqs.application.UApplication" > 并初始化Const.init();此处的初始化主要是对内存缓存,SD卡缓存大小,缓存时间等进行设置,如果不初始化,则按使用默认配置; 2:依赖HttpAqs-library或者jar包 3:通过公有方法进行网络请求,示例如下: >文本请求: >解析后的文本请求: HttpRequest.reqquest(int,String,Parse,Class){....}; >原生string文本请求: HttpRequest.getString(String,AqsString){...} >单张图片请求: HttpRequest.setImage(ImageView,String,int,int){...} >多张图片请求: 可使用AQSImageView控件来加载图片;特别是针对listview图文混排 实现方法: >在布局中添加 >在代码中 av.setImageUrl(url);

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值