Android第九讲笔记(xUtils框架,Gson框架)


备注:最后一个淘宝案例已经更新了!—2021.5.12

1.xUtils框架

1.背景

在上一讲,我们学习了原生HTTP访问
原生HTTP访问的缺点:
在这里插入图片描述
可以看到,这样网络访问有几个缺点

  • 需要自己创建一个线程,在这个线程中进行网络请求
  • 如果要进行UI操作还要切回主线程执行
  • 对于异常的处理,需要自己手写

xUtils框架将上述几个问题封装起来,这样我们直接使用就会变得很简单,让使用者感到方便。

2.xUtils简介

官网
xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展.
功能简介
在这里插入图片描述

3.xUtils框架使用方法

1.准备工作

首先要添加权限

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

如需要访问http请求,则需要添加下面红色方框里面的代码
在这里插入图片描述

2.导入依赖

implementation 'org.xutils:xutils:3.8.5'

在这里插入图片描述

3.添加以下代码

x.Ext.init(getApplication());
RequestParams requestParams = new RequestParams("http://148.70.46.9/object");//访问的请求地址
x.http().get(requestParams, new Callback.CommonCallback<String>() {
	@Override
	public void onSuccess(String result) {
	
	}

	@Override
	public void onError(Throwable ex, boolean isOnCallback) {
	
	}

	@Override
	public void onCancelled(CancelledException cex) {
	
	}
    
	@Override
	public void onFinished() {
	
	}
});

4.简单案例

在这里插入图片描述

package com.hnucm.android_0507;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView.findViewById(R.id.textview);
        x.Ext.init(getApplication());
        RequestParams requestParams = new RequestParams("http://148.70.46.9/object");
        x.http().get(requestParams, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Log.i("MainActivity","result"+result);

                //主线程
                textView.setText(result);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.i("MainActivity","ex"+ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });

    }
}

在这里插入图片描述
可以看到

  • 框架帮助我们完成了启动子线程的操作,所以不需要我们在进行网络请求的时候自己创建启动子线程
  • 而且拿到数据以后不需要手动切回主线程,使用框架会帮我们切回主线程
  • 对于异常,框架也会帮助我们自动处理
    这个框架的初步了解就到此结束了。
    其实这个框架还有很多好用的地方,注解开发等等…待补

2.Gson框架

官网

json解析有时候很复杂。而Gson框架就简化了我们的解析操作.

Gson框架可以直接将json解析为java的实体类,方便用户操作

但是要注意,java类中的属性要和json中的键值一一对应

1.导入依赖

implementation 'com.google.code.gson:gson:2.8.6'

在这里插入图片描述
以下案例都在上一个xUtils框架的基础上修改

2.案例一(简单json数据解析):

根据json的键值创建对应的java类的属性。这里就不贴java类了。
在这里插入图片描述

package com.hnucm.android_0507;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.google.gson.Gson;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=findViewById(R.id.textview);
        x.Ext.init(getApplication());
        RequestParams requestParams = new RequestParams("http://148.70.46.9/object");

//        Retrofit RxJava
        x.http().get(requestParams, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Log.i("MainActivity","result"+result);
                Gson gson=new Gson();
                Student student = gson.fromJson(result, Student.class);

                //主线程
                textView.setText(student.name);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.i("MainActivity","ex"+ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });

    }
}

结果图
在这里插入图片描述

3.案例二(json嵌套json数据解析)

主要需要更改Student类
因为在本案例的接收到的json对象中中的的其中一个键值是"class"
而"class"是java的关键字
@SerializedName这个注解作用:属性重命名,可以将json中的属性名转为我们自己自定义的属性名
就可以将下面定义的属性名改为class而不冲突
在这里插入图片描述
在这里插入图片描述

package com.hnucm.android_0507;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.google.gson.Gson;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=findViewById(R.id.textview);
        x.Ext.init(getApplication());
        RequestParams requestParams = new RequestParams("http://148.70.46.9/object1");

//        Retrofit RxJava
        x.http().get(requestParams, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Log.i("MainActivity","result"+result);
                Gson gson=new Gson();
                Student student = gson.fromJson(result, Student.class);

                //主线程
                textView.setText(student.name+student.class1.classname);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.i("MainActivity","ex"+ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });

    }
}

4.案例三

同样要更改Student类
在这里插入图片描述
在这里插入图片描述

package com.hnucm.android_0507;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.google.gson.Gson;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=findViewById(R.id.textview);
        x.Ext.init(getApplication());
        RequestParams requestParams = new RequestParams("http://148.70.46.9/object3");

//        Retrofit RxJava
        x.http().get(requestParams, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Log.i("MainActivity","result"+result);
                Gson gson=new Gson();
                Student student = gson.fromJson(result, Student.class);

                //主线程
                textView.setText(student.classname);

                for(Student.MyClass myClass:student.students){
                    Log.i("MainActivity","result:"+myClass.name);
                }
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.i("MainActivity","ex"+ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });

    }
}

5.使用GsonFormat

GsonFormat插件可以根据我们给出的json对象数据来一键生成java类,避免了使用者可能因为打错java类的属性名而接收不到json中的数据问题。
在这里插入图片描述
点击右键选择Generate,点击GsonFormatPlus

在这里插入图片描述

第一次使用可以设置一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即可自动生成
在这里插入图片描述

补充

1.学会打断点

当出现问题的时候学会打断点进行查错,点击爬虫进行单步运行
在这里插入图片描述
当我们运行到这句话时,我们发现student的classname1属性是空的,可以发现问题应该是出现在这里。从而进行排查。

在这里插入图片描述

2.构造接口的平台

https://www.fastmock.site
在很多的项目中,我们需要获得很多的数据,可以本地获取,也可以通过网络接口来获取。而这一个平台提供给了我们创建自己的接口并且写入JSON数据的方法。
操作很简单,大家可以自己去试试。

3.图床的使用

图床是什么呢,图床可以将本地的图片上传至服务器,针对每个图片提供一个唯一的url,借助这个url就可以将图片展示到其他网页上。
我使用了一个免费的图床有一段时间了,个人感觉还不错
遇见图床
将自己本地的图片上传之后,就能拿到url了。
在这里插入图片描述
听说还可以自己搭建图床,待补

4.整合网络请求和列表的案例

先放个演示
在这里插入图片描述
过几天有时间源码放在github上可供大家参考,批评指正。
淘宝案例

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
xUtils是一个开源的Android开发框架,它提供了很多便捷的操作,可以简化Android开发过程中的代码编写。其中,xUtils中的HttpUtils是一个用于发送HTTP请求的工具类。下面是一个简单的使用示例: ```java import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.x; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建HttpUtils实例 HttpUtils httpUtils = new HttpUtils(); // 创建请求参数对象 RequestParams params = new RequestParams("http://www.example.com/api"); // 发送GET请求 httpUtils.send(HttpMethod.GET, params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { // 请求成功时的处理逻辑 Log.d("TAG", "onSuccess: " + result); } @Override public void onError(Throwable ex, boolean isOnCallback) { // 请求失败时的处理逻辑 Log.e("TAG", "onError: " + ex.getMessage()); } @Override public void onCancelled(CancelledException cex) { // 请求被取消时的处理逻辑 Log.d("TAG", "onCancelled"); } @Override public void onFinished() { // 请求完成时的处理逻辑 Log.d("TAG", "onFinished"); } }); } } ``` 上述代码中,我们首先创建了一个HttpUtils实例,然后创建了一个RequestParams对象,用于设置请求的URL和参数。接下来,我们使用HttpUtils的send方法发送GET请求,并通过Callback回调接口处理请求的结果。在回调方法中,我们可以根据请求的结果进行相应的处理。 请注意,上述代码中的示例仅用于演示xUtils框架中的HttpUtils的基本用法,实际使用时可能需要根据具体需求进行适当的修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a碟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值