码迷,mamicode.com
首页 > 移动开发 > 详细

Android 谷歌 开源 通信框架 VOLLEY(二)——String/Json处理

时间:2015-08-05 13:00:32      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:volley   stringrequ   jsonreques   字符串   json   

二、功能请求

大概知道了volley是什么了,第二章我们就来看下volley,自己默认有哪些功能。
技术分享

1.StringRequest
技术分享

package com.example.VolleyDemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
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 static com.android.volley.Response.*;

public class StringActivity extends Activity {

    private TextView mStringResult;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_string);

        mStringResult = (TextView) findViewById(R.id.StringTxt);
    }

    RequestQueue mQueue;
    @Override
    protected void onStart() {
        super.onStart();

        /********************4步骤********************/
        //1.创建一个RequestQueue对象
        mQueue = Volley.newRequestQueue(this);

        //2.启动RequestQueue
        mQueue.start();//请求队列开始进行调度

        //3.创建一个StringRequest
        StringRequest stringRequest = new StringRequest("http://www.baidu.com",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("TAG", response);
                        mStringResult.setText(response);
                    }
                }, new ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
                Toast.makeText(StringActivity.this, "网络错误", Toast.LENGTH_SHORT).show();
            }
        });

        //4.将StringRequest对象添加到RequestQueue里面
        stringRequest.setTag("StringActivity");
        mQueue.add(stringRequest);
        /******************************************/
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mQueue!=null){
            mQueue.cancelAll("StringActivity");
        }
    }
}

RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。

RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。

Volley的比较核心的一个类就是RequestQueue,一个请求队列。它负责管理工作线程,读写缓存,和解析、分发响应(具体操作还是由具体的类实现),即将发出的Http请求都会首先聚集在这里等待工作线程来实现请求。RequestQueue可以被看成一艘载满Http请求的航空母舰,而工作线程就是弹射器喽。

1.获取RequestQueue(得到一艘航母,可以是自己造的,也可以是委托别人造的,下面会提到)
2.实例化一个Request(得到一架飞机,你也知道飞机又很多类型啦)
3.将Request加入RequestQueue,等待工作线程将其发送出去(把飞机从机库升上起飞甲板,等待弹射器把它扔出去)
起飞侦察机-发出GET请求

但是但是StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了.
技术分享

2.JsonRequest
技术分享

package com.example.VolleyDemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;

import static com.android.volley.Response.*;

public class JsonActivity extends Activity {

    private TextView mJsonResult;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);

        mJsonResult = (TextView) findViewById(R.id.JsonTxt);
    }

    RequestQueue mQueue;
    @Override
    protected void onStart() {
        super.onStart();

        /*******************4步骤***********************/
        //1.创建一个RequestQueue对象
        mQueue = Volley.newRequestQueue(this);

        //2.启动RequestQueue
        mQueue.start();

        //3.创建一个JsonObjectRequest
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json", null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("TAG", response.toString());
                        try {
                            mJsonResult.setText(response.getString("count"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
                Toast.makeText(JsonActivity.this, "网络错误", Toast.LENGTH_SHORT).show();
            }
        });

        //4.将JsonObjectRequest对象添加到RequestQueue里面
        mQueue.add(jsonObjectRequest);
        /******************************************/
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mQueue!=null){
            mQueue.cancelAll(this);
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 谷歌 开源 通信框架 VOLLEY(二)——String/Json处理

标签:volley   stringrequ   jsonreques   字符串   json   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/47293607

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!