网络框架-Volley的使用解析Json以及加载网络图片方法

本文介绍了Google的Volley网络框架在解析Json和加载网络图片方面的使用。首先,通过步骤详细讲解了如何使用Volley进行Json解析,包括申请Key、导入库、解析地址和填充数据。然后,展示了如何利用Volley加载网络图片,包括获取图片链接、添加权限和实际加载过程。文章附带了相关XML和Java代码示例。
摘要由CSDN通过智能技术生成

Volley是什么?
Google I/O 大会上,Google 推出 Volley的一个网络框架
Volley适合什么场景?
Volley适合网络通信频繁操作,并能同时实现多个网络通信。

网络框架-Volley网上很多,自己可以自行百度。我这就不提供了

1.Volley的使用解析Json

做一个简单有趣的小软件,一个QQ测凶吉的小软件,使用Volley解析一段地址获取Json并且解析Json显示出来,很简单,也很基础,不过却很直观!
先来看看效果图吧!

截图

步骤

1.申请地址已经key
2.把Volley的jar文件导入工程
3.解析地址获取到json
4.解析json填入

1.申请的Key:8d9160d4a96f2a6b5316de5b9d14d09d
2.接口地址(聚合数据申请的):http://japi.juhe.cn/qqevaluate/qq?key=你申请的Key&qq=374960286
3.将Volley导入工程
4.开工了

注意一定要先添加网络权限: android:name=”android.permission.INTERNET”/>

activity_main.xml


 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.myapplication.MainActivity">


    <RelativeLayout
        android:id="@+id/tab1_rl"
        android:layout_width="match_parent"
        android:layout_height="51dp"
        android:background="#088af7">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="51dp"
            android:layout_centerHorizontal="true"
            android:background="@null"
            android:gravity="center"
            android:text="QQ测凶吉"
            android:textColor="@android:color/white"
            android:textSize="20dp" />
    </RelativeLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:text="请输入你的QQ号码查询测试结果" />

    <EditText
        android:id="@+id/medittext"
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_margin="10dp"
        android:background="#f7f7f7"
        android:gravity="center"
        android:hint="请输入正确的QQ号" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/mbut"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:background="#088af7"
            android:text="查询"
            android:textColor="@android:color/white" />

        <Button
            android:id="@+id/mbuts"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:background="#088af7"
            android:text="清空"
            android:textColor="@android:color/white" />
    </LinearLayout>


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:layout_marginTop="10dp"
        android:background="#aeaea9" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_margin="10dp"
        android:gravity="top|left"
        android:textColor="@color/colorAccent"
        android:text="QQ号码测试结果:" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#aeaea9" />

    <TextView
        android:id="@+id/mtext"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_margin="10dp"
        android:gravity="top|left"
        android:textColor="@color/colorAccent"
        android:text="结果分析:" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#aeaea9" />





</LinearLayout>


MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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 org.json.JSONException;
import org.json.JSONObject;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {



    @Bind(R.id.medittext)
    EditText medittext;
    @Bind(R.id.mbut)
    Button mbut;
    @Bind(R.id.mbuts)
    Button mbuts;
    @Bind(R.id.text)
    TextView text;
    @Bind(R.id.mtext)
    TextView mtext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }
    @OnClick({R.id.mbut, R.id.mbuts})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.mbut:
                String QQ = medittext.getText().toString();//获取输入框中QQ
                if (!TextUtils.isEmpty(QQ)) {
                    //解析json
                    VolleyJson(QQ);
                } else {
                    Toast.makeText(MainActivity.this, "请输入QQ号", Toast.LENGTH_SHORT).show();

                }
                break;
            case R.id.mbuts:
                String qq = medittext.getText().toString();//获取输入框中QQ
                if (!TextUtils.isEmpty(qq)){
                    text.setText("QQ号码测试结果:");
                    mtext.setText("结果分析:");
                    medittext.setText("");
                }else {
                    Toast.makeText(MainActivity.this, "TM输入QQ号先", Toast.LENGTH_SHORT).show();
                }

                break;
        }
    }


    //解析接口
    private void VolleyJson(String QQ) {
        String url = "http://japi.juhe.cn/qqevaluate/qq?key=8d9160d4a96f2a6b5316de5b9d14d09d&qq=" + QQ;

        //创建请求队列
        RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
        //请求
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                getJson(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(MainActivity.this, "请查看网络", Toast.LENGTH_SHORT).show();

            }
        });
        //添加到列队
        requestQueue.add(stringRequest);
    }

    //json解析
    private void getJson(String json) {
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONObject jsonObject1 = jsonObject.getJSONObject("result");
            JSONObject jsonObject2 = jsonObject1.getJSONObject("data");
            text.setText("QQ号码测试结果:" + jsonObject2.getString("conclusion"));
            mtext.setText("结果分析:" + jsonObject2.getString("analysis"));

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }


}

这样子就可以解析出json中的字符串并且显示出来QQ号的查询效果了,以上是这个项目的完整代码

2.Volley加载网络图片

还是从简单的做起,还是以一个例子来,先看下效果图!

这里写图片描述

步骤

1.获取图片的链接
2.添加权限
3.加载网络图片

activity_image_loader.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.volleydemo.ImageLoaders">

    <RelativeLayout
        android:id="@+id/tab1_rl"
        android:layout_width="match_parent"
        android:layout_height="51dp"
        android:background="#088af7"  >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="51dp"
            android:layout_centerHorizontal="true"
            android:background="@null"
            android:gravity="center"
            android:text="图片加载"
            android:textColor="@android:color/white"
            android:textSize="20dp" />
    </RelativeLayout>

    <Button
        android:id="@+id/mbutto"
        android:textSize="20sp"
        android:textColor="@android:color/white"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="30dp"
        android:background="#088af7"
        android:text="加载图片" />

    <ImageView
        android:layout_marginTop="50dp"
        android:layout_gravity="center_horizontal"
        android:id="@+id/mimg"
        android:layout_width="250dp"
        android:layout_height="200dp"
        />

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/mNetwork"
        android:layout_width="match_parent"
        android:layout_height="200dp" />


</LinearLayout>

ImageLoaders.java

package com.example.volleydemo;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class ImageLoaders extends AppCompatActivity {

    @Bind(R.id.mimg)
    ImageView mimg;
    @Bind(R.id.mbutto)
    Button mbutto;

    @Bind(R.id.mNetwork)
    NetworkImageView mNetwork;

    private String url = "http://img5.duitang.com/uploads/item/201508/24/20150824213254_aFSGE.jpeg";
    private String imgurl = "http://img3.imgtn.bdimg.com/it/u=4224673892,2874807827&fm=26&gp=0.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_loader);
        ButterKnife.bind(this);
    }

    /*
    * ImageListener三个参数
    *     第一个 成功绑定的imgview控件
    *     第二个 加载中图片
    *     第三个 加载失败代替图片
    *
    * */
    @OnClick({R.id.mbutto})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.mbutto:
                //创建请求列队
                RequestQueue requestQueue = Volley.newRequestQueue(ImageLoaders.this);
                //创建ImageLoader对象
                ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
                    //空的磁盘缓存
                    @Override
                    public Bitmap getBitmap(String s) {
                        return null;
                    }

                    @Override
                    public void putBitmap(String s, Bitmap bitmap) {

                    }
                });
                //实现解析
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(mimg, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
                //请求解析
                imageLoader.get(url, imageListener);
                break;
        }

        /*
        *
        * 无需按钮运行就加载图片
        *
        * */


        //创建请求列队
        RequestQueue requestQueues = Volley.newRequestQueue(ImageLoaders.this);
        //创建ImageLoader对象
        ImageLoader imageLoaders = new ImageLoader(requestQueues, new ImageLoader.ImageCache() {
            //空的磁盘缓存
            @Override
            public Bitmap getBitmap(String s) {
                return null;
            }

            @Override
            public void putBitmap(String s, Bitmap bitmap) {

            }
        });
        //正在加载的图片
        mNetwork.setDefaultImageResId(R.mipmap.ic_launcher);
        //加载失败的图片
        mNetwork.setErrorImageResId(R.mipmap.ic_launcher);
        //加载图片
        mNetwork.setImageUrl(imgurl,imageLoaders);

    }
}

这个项目只是自己的一个学习,为了自己以后观看和回忆,我只是入门级一个菜鸟,大神不要喷 - . -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值