爪哇 2博客
 爪哇 2博客

使用Volley的竞彩篮球分析 JSON解析教程

在本教程中,我们将看到使用Volley的竞彩篮球分析 JSON解析教程。
在上一篇文章中,我们已经看到 安卓 JSON解析教程 这很简单。在本教程中,我们将使用外部库Volley发送HTTP请求。在上一教程中,您可以将其视为AsyncTask的替代品。

为什么要使用Volley而不是AsyncTask。

  • 不太复杂
  • 高效的网络管理。
  • 易于定制

范例:

我已经实施了 宁静的webservices json 示例。我将使用相同的示例来实现宁静的Web服务。
如果您要在Web服务上方进行部署,则使用以下URL来获取JSON数据

1
2
3
 
< 跨度 风格=“颜色:绿色;字体粗细:粗体;”> http ://192.168.2.22:8080/JAXRSJsonExample/rest/countries</span>
 

这里  192.168.2.22 是我机器的IP地址。在计算机上实现此Web服务后,应将其替换为IP地址。
如果你不这样做’想要自己实现其余的Web服务,并希望在json以下响应。您可以使用下面的链接。
//cdn.rawgit.com/arpitmandliya/竞彩篮球分析RestJSONExample/master/countries.json
您将从上面的URL得到下面的Json响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
[
{
“ID” :1,
“国家的名字”:“印度”
},
{
“ID” :4,
“国家的名字”:“中国”
},
{
“ID” :3,
“国家的名字”:“尼泊尔”
},
{
“ID” :2,
“国家的名字”:“不丹”
}
]
 

我们正在从其余的Web服务获得JSONArray。如果您不熟悉JSON,可以通过 Json教程。我们将在JSON响应上方渲染为 安卓自定义列表视图 as below:

现在让我们编写此示例:

源代码:

步骤1:建立专案

创建一个 安卓应用项目 命名“JSONPasingUsingVolley”.

步骤2:添加Volley gradle依赖项

为了使用Volley库,我们需要添加volley依赖项“compile ‘com.mcxiaoke.volley:library:1.0.19′”在build.gradle(Module:app)中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
应用 插入: 'com.android.application'
 
安卓 {
    编译器 25
    buildToolsVersion “ 25.0.0”
    defaultConfig {
        应用Id “ com .java2blog.jsonparsingusingvolley”
        minSdkVersion 15
        targetSdkVersion 25
        版本代码 1
        版本名 "1.0"
        testInstrumentationRunner “ 安卓.support.test.runner.竞彩篮球分析JUnitRunner”
    }
    buildTypes {
        释放 {
            minifyEnabled
            proguardFiles 得到 DefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
依存关系 {
    编译文件树( 目录 : 'libs', 包括: ['*。罐'])
    安卓TestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        排除 : 'com.android.support', 模组: “支持注释”
    })
    编译 'com.android.support:appcompat-v7:25.0.0'
    编译 'com.mcxiaoke.volley:library:1.0.19'
    测试编译 'junit:junit:4.12'
}
 

第3步:创建布局

Change res ->布局 -> 活动_main.xml 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<? XML文件 ="1.0" 编码方式=“ utf-8”?>
<相对布局 XML文件 ns :安卓="http://schemas.android.com/apk/res/android"
XML文件 ns : 工具 ="http://schemas.android.com/tools"
安卓: ID =“ @ + ID / 活动_main”
安卓:布局_width=“ match_parent”
安卓:布局_height=“ match_parent”
安卓:底部填充=“ @ dimen / 活动_vertical_margin”
安卓:paddingLeft=“ @ dimen / 活动_horizo​​ntal_margin”
安卓:paddingRight=“ @ dimen / 活动_horizo​​ntal_margin”
安卓:paddingTop="10dp"
工具 :语境=“ com .java2blog.androidrestjsonexample.MainActivity”>
 
<纽扣
安卓:布局_width=“ match_parent”
安卓:布局_height=“包装内容”
安卓: 文本 =“获取国家/地区数据”
安卓: ID =“ @ + ID / btn提交”
/>
 
<列表显示
安卓: ID =“ @ + ID / 安卓:list”
安卓:布局_width=“ match_parent”
安卓:布局_height=“包装内容”
安卓:布局_below=“ @ ID / btn提交”
/>
</相对布局>
 

我们有一个按钮和列表视图。当您单击按钮时,我们将通过调用静态Web服务在listview中填充数据并将其呈现在listview上。

步骤4:为行创建布局

正如我们在activity_main.xml中声明ListView小部件一样。现在我们需要为单个行提供布局。
  • Go to res -> 布局
  • 右键单击布局
  • Click on New -> File.
  • 创建一个名为“row_item.xml”并将以下代码粘贴到row_item.xml中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
<? XML文件 ="1.0" 编码方式=“ utf-8”?>
<网格布局 XML文件 ns :安卓="http://schemas.android.com/apk/res/android"
安卓:布局_width=“ match_parent”
安卓:布局_height=“ match_parent” >
<文字检视
安卓:布局_width=“包装内容”
安卓:布局_height=“包装内容”
安卓:布局_columnWeight="1"
安卓:布局_marginLeft="10dp"
安卓:字体大小="30dp"
安卓: 文本 Color=“#1E90FF”
安卓: ID =“ @ + ID / 文本 ViewId”
安卓:布局_row="0"
安卓:布局_column="1" />
<文字检视
安卓:布局_width=“包装内容”
安卓:布局_height=“包装内容”
安卓:布局_columnWeight="1"
安卓:布局_marginLeft="10dp"
安卓:字体大小="20dp"
安卓: 文本 Color=“#4B0082”
安卓: ID =“ @ + ID / 文本 ViewCountry”
安卓:布局_row="1"
安卓:布局_column="1" />
</网格布局>
 

步骤5:创建模型对象国家/地区:

如果您注意到,我们将从具有4个项目的静态Web服务中获取Json数组。每个项目都有两个属性id和countryName。我们将为每个项目创建国家对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
com . 爪哇 2blog.安卓restjsonexample;
上市 国家{
     整型 ID ;
     国家的名字;
 
    上市 国家( 整型 i, 国家的名字) {
        ();
         这个 . ID = i;
         这个 .国家的名字 = 国家的名字;
    }
    上市 整型 得到 Id() {
        返回 ID ;
    }
    上市 虚空 设置名称( 整型 ID ) {
         这个 . ID = ID ;
    }
    上市 得到 CountryName() {
        返回 国家的名字;
    }
    上市 虚空 setCountryName( 国家的名字) {
         这个 .国家的名字 = 国家的名字;
    }
}
 

步骤6:为ListView创建BaseAdapter

在创建MainActivity之前,我们需要为自定义ListView行创建CustomCountryList类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
com . 爪哇 2blog.安卓restjsonexample;
 
进口 安卓. 应用程式 .活动;
进口 安卓. 视图 .LayoutInflater;
进口 安卓. 视图 . 视图 ;
进口 安卓. 视图 .视图组;
进口 安卓.小部件.BaseAdapter;
进口 安卓.小部件.文字检视;
 
进口 com . 爪哇 2blog.安卓restjsonexample.国家;
进口 com . 爪哇 2blog.安卓restjsonexample.R;
 
进口 爪哇 . 实用程序 .数组列表;
 
上市 CustomCountryList 延伸 BaseAdapter {
 
    私人的 活动 语境;
    数组列表 国家;
 
    上市 CustomCountryList(活动 语境, 数组列表 国家) {
     //  超级(上下文,R.layout.row_item,国家);
         这个 .语境 = 语境;
         这个 .国家=国家;
 
    }
 
    上市 静态的 视图 Holder
    {
        文字检视 文本 ViewId;
        文字检视 文本 ViewCountry;
    }
    @覆写
    上市 视图 得到 View( 整型 位置, 视图 convertView, 视图组 父母) {
         视图 =convertView;
 
        LayoutInflater 充气机 = 语境. 得到 LayoutInflater();
         视图 Holder h ;
         如果 (convertView == 空值 ) {
             h = 视图 Holder();
             = 充气机.膨胀(R.布局. 行 _item, 空值 , 真正 );
             h . 文本 ViewId = (文字检视) .findViewById(R. ID . 文本 ViewId);
             h . 文本 ViewCountry = (文字检视) .findViewById(R. ID . 文本 ViewCountry);
            //将持有者与视图一起存储。
            .setTag( h );
        }
         其他 {
             h = ( 视图 Holder) convertView. 得到 Tag();
        }
 
         h . 文本 ViewCountry.setText(国家. 得到 (位置). 得到 CountryName());
         h . 文本 ViewId.setText(+国家. 得到 (位置). 得到 Id());
 
        返回  ;
    }
 
    上市 得到 ItemId( 整型 位置) {
        返回 位置;
    }
 
    上市 目的 得到 Item( 整型 位置) {
        返回 位置;
    }
 
    上市 整型 得到 Count() {
 
         如果 (国家. 尺寸 ()<=0)
            返回 1;
        返回 国家. 尺寸 ();
    }
}
 

此类用于为ListVIew填充数据。调用getView方法绘制每行。

步骤7:创建MainActivity

我们将使用排球库的JSONArrayRequest类。

1
2
3
4
5
6
7
8
 
JsonArrayRequest 要求 = JsonArrayRequest( json URl,
                     响应.听众() {
                        @覆写
                        上市 虚空 onResponse(JSONArray 响应) {... , 响应.错误侦听器() {
                            @覆写
                            上市 虚空 onErrorResponse(凌空抽射Error 错误 ) {...)
 

它具有三个参数。

  • rest Web服务url,该URL返回JSONArray响应。
  • 传递侦听器,该侦听器具有名为onResponse的方法,当我们从剩余URL获得响应时将调用该方法。
  • 传递错误侦听器,该侦听器具有名为onErrorResponse的方法,当我们在执行其余的Web服务url时遇到任何错误时,该方法将被调用。

您还可以根据需要使用来自凌空类的JsonObjectRequest或StringRequest。

如下更改src / main / 包Name / 主要活动.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
com . 爪哇 2blog. json parsingusingvolley;
 
进口 安卓. 应用程式 .活动;
进口 安卓. 应用程式 .进度对话框;
进口 安卓. 操作系统 .;
进口 安卓.支持.v7. 应用程式 .AppCompatActivity;
进口 安卓. 实用程序 . 日志记录 ;
进口 安卓. 视图 . 视图 ;
进口 安卓.小部件.适配器视图;
进口 安卓.小部件.纽扣;
进口 安卓.小部件.列表显示;
进口 安卓.小部件.吐司;
进口 com .安卓.凌空抽射.请求队列;
进口 com .安卓.凌空抽射.响应;
进口 com .安卓.凌空抽射.凌空抽射Error;
进口 com .安卓.凌空抽射.工具箱.JsonArrayRequest;
进口 com .安卓.凌空抽射.工具箱.凌空抽射;
 
进口 组织 . json .JSONArray;
进口 组织 . json .JSONException;
进口 组织 . json .JSONObject;
 
进口 爪哇 .. 网址 ;
进口 爪哇 . 实用程序 .数组列表;
进口 静态的 安卓.内容.内容值. 标签 ;
 
上市 主要活动 延伸 AppCompatActivity {
 
    私人的 纽扣 btn提交;
     响应Text;
    活动 活动;
    数组列表 国家= 数组列表();
    私人的 进度对话框 progressDialog;
    列表显示 列表显示;
 
    //如果您要部署其余的Web服务,请使用下面的链接并将下面的IP地址替换为您的
    //http://192.168.2.22:8080/JAXRSJsonExample/rest/countries
 
    //直接的Web服务URL
    私人的 路径 = "//cdn.rawgit.com/arpitmandliya/竞彩篮球分析RestJSONExample/master/countries.json";
 
    @覆写
    受保护的 虚空 onCreate(savedInstanceState) {
        .onCreate(savedInstanceState);
        setContentView(R.布局.活动_main);
        活动 = 这个 ;
        btn提交 = (纽扣) findViewById(R. ID .btn提交);
        列表显示 = (列表显示) findViewById(安卓.R. ID . 清单 );
        btn提交.setOnClickListener( 视图 .OnClickListener() {
            @覆写
            上市 虚空 onClick( 视图 v) {
                国家.明确();
 
                progressDialog = 进度对话框(主要活动. 这个 );
                progressDialog.setMessage(“获取国家/地区数据” );
                progressDialog.setCancelable();
                progressDialog. 显示 ();
                //调用WebService
                 得到 WebServiceResponseData();
            }
        });
    }
 
    受保护的 空洞 得到 WebServiceResponseData() {
            JsonArrayRequest 要求 = JsonArrayRequest( json URl,
                     响应.听众() {
                        @覆写
                        上市 虚空 onResponse(JSONArray 响应) {
                             日志记录 .d( 标签 , 响应.toString());
                             如果 (progressDialog.正在显示())
                                progressDialog.解雇();
 
                            //解析json响应并遍历每个JSON对象
                             日志记录 .d( 标签 , “数据:” + 响应Text);
                             尝试 {
 
                                 对于 ( 整型 i = 0; i < 响应.长度(); i ++ ) {
                                    JSONObject json object = 响应. 得到 JSONObject(i);
                                     整型 ID = json object. 得到 Int( “ID” );
                                     国家 = json object. 得到 String(“国家的名字”);
                                     日志记录 .d( 标签 , “ID:” + ID );
                                     日志记录 .d( 标签 , “国家:” + 国家);
                                    国家 国家Obj = 国家( ID , 国家);
                                    国家.(国家Obj);
                                }
                            } 抓住 (JSONException e) {
                                e.printStackTrace();
                                吐司.makeText( 得到 ApplicationContext(),
                                        “错误:” + e. 得到 Message(),
                                        吐司.LENGTH_LONG). 显示 ();
                            }
 
                            CustomCountryList customCountryList = CustomCountryList(活动, 国家);
                            列表显示.setAdapter(customCountryList);
 
                            列表显示.setOnItemClickListener( 适配器视图.OnItemClickListener() {
                                @覆写
                                上市 虚空 onItemClick(适配器视图<?> adapterView, 视图 视图 , 整型 位置, l) {
                                    吐司.makeText( 得到 ApplicationContext(),“您选择了”+国家. 得到 (位置). 得到 CountryName()+ “作为国家”,吐司.LENGTH_SHORT). 显示 ();        }
                            });
                         }
                        },   响应.错误侦听器() {
                            @覆写
                            上市 虚空 onErrorResponse(凌空抽射Error 错误 ) {
                                吐司.makeText(主要活动. 这个 , 错误 . 得到 Message(),吐司.LENGTH_LONG). 显示 ();
                            }
 
                        });
                        请求队列 要求 uestQueue = 凌空抽射. 新 RequestQueue( 这个 );
                         要求 uestQueue.( 要求 );
            返回 空值 ;
        }
    }
 

步骤8: 在竞彩篮球分析Manifest.xml中添加互联网权限

复制以下代码:

1
2
3
 
< 用途 -允许 安卓: 名称 =“ 安卓.permission.INTERNET” />
 

将其放在竞彩篮球分析Manifest.xml中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<? XML文件 ="1.0" 编码方式=“ utf-8”?>
<表现 XML文件 ns :安卓="http://schemas.android.com/apk/res/android"
=“ com .java2blog.jsonparsingusingvolley”>
 
< 用途 -允许 安卓: 名称 =“ 安卓.permission.INTERNET” />
<应用
安卓:allowBackup=“真正”
安卓: 图标 =“ @ mipmap / ic_launcher”
安卓:标签=“ @ string / 应用程式 _name”
安卓:支持sRtl=“真正”
安卓:主题=“ @ 风格 / AppTheme”>
<活动 安卓: 名称 =“。主要活动”>
<意图-过滤>
<行动 安卓: 名称 =“ 安卓.intent.action.MAIN” />
 
<类别 安卓: 名称 =“ 安卓.intent.category.LAUNCHER” />
</意图-过滤>
</活动>
</应用>
 
</表现>  
 

完成,我们已将Internet权限添加到竞彩篮球分析Manifest.xml。您的应用程序必须现在能够访问互联网。

步骤9:运行应用

运行该应用程序时,将出现以下屏幕:

当您单击上方按钮时,您将进入以下屏幕。

我们已经使用Volley完成了竞彩篮球分析 JSON解析教程。如果您遇到任何问题,请发表评论。

分享这个

作者

关注作者

相关文章

  • 1月13日

    安卓 SQLite数据库CRUD示例

    在本教程中,我们将学习竞彩篮球分析 SQLite数据库CRUD示例。 安卓 SQLite是开源关系数据库,可用于执行Crud操作。你不’不必为此进行显式安装。默认情况下,它在android中可用。让’s从一个简单的例子开始:在这个例子中,我们将[…]

  • 12月13日

    改装竞彩篮球分析教程

    在本教程中,我们将看到Retrofit 安卓教程以从服务器获取数据。在上一篇文章中,我们看到了非常简单的android JSON解析教程。如果您不了解Retrofit,则它是用于处理HTTP请求的android http 库。您可以在以前的[…]

  • 12月10日

    安卓 Restful Web服务教程

    在本教程中,我们将把android与宁静的Web服务集成在一起,这些服务返回json作为响应。因此,我们将从宁静的Web服务获取json,然后将json响应呈现给android自定义listview。例子:我已经实现了restful webservices json 例子。我将使用相同的示例[…]

  • 12月05日

    安卓 Switch按钮示例

    安卓开关按钮是UI小部件,只有两个状态,即“开”和“关”。它允许用户在这两种状态之间更改设置。 安卓切换按钮仅在竞彩篮球分析 4.0或更高版本的android设备中可用。示例:您可以使用这些按钮更改WiFi或蓝牙的[On]和[Off]状态[…]

  • 12月05日

    安卓 ToggleButton示例

    安卓 ToggleButton是UI小部件,只有两个状态,即ON和OFF。它允许用户在这两种状态之间更改设置。示例:您可以使用这些按钮更改WiFi或蓝牙的打开和关闭状态源代码:下载Github源代码步骤1:创建项目创建名为[的竞彩篮球分析应用程序项目…]

  • 12月04日

    安卓 Spinner下拉示例

    在这篇文章中,我们将看到有关竞彩篮球分析 Spinner Dropdown示例的信息。 安卓 Spinner是具有下拉菜单的UI小部件。点击下拉菜单后,您可以在各种选项中选择一个选项。我将把静态数据放入android微调器,然后从中选择值之一。源代码: […]

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇 2博客