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

目录

  • 1.xUtils框架
    • 1.背景
    • 2.xUtils简介
    • 3.xUtils框架使用方法
      • 1.准备工作
      • 2.导入依赖
      • 3.添加以下代码
      • 4.简单案例
  • 2.Gson框架
    • 1.导入依赖
    • 2.案例一(简单json数据解析):
    • 3.案例二(json嵌套json数据解析)
    • 4.案例三
    • 5.使用GsonFormat
  • 补充
    • 1.学会打断点
    • 2.构造接口的平台
    • 3.图床的使用
    • 4.整合网络请求和列表的案例

1.xUtils框架

1.背景

在上一讲,我们学习了原生HTTP访问
原生HTTP访问的缺点:
Android第九讲笔记(xUtils框架,Gson框架)_第1张图片
可以看到,这样网络访问有几个缺点

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

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

2.xUtils简介

官网
xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展.
功能简介
Android第九讲笔记(xUtils框架,Gson框架)_第2张图片

3.xUtils框架使用方法

1.准备工作

首先要添加权限

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

如需要访问http请求,则需要添加下面红色方框里面的代码
Android第九讲笔记(xUtils框架,Gson框架)_第3张图片

2.导入依赖

implementation 'org.xutils:xutils:3.8.5'

Android第九讲笔记(xUtils框架,Gson框架)_第4张图片

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.简单案例

Android第九讲笔记(xUtils框架,Gson框架)_第5张图片

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() {
     

            }
        });

    }
}

Android第九讲笔记(xUtils框架,Gson框架)_第6张图片
可以看到

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

2.Gson框架

官网

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

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

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

1.导入依赖

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

Android第九讲笔记(xUtils框架,Gson框架)_第7张图片
以下案例都在上一个xUtils框架的基础上修改

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

根据json的键值创建对应的java类的属性。这里就不贴java类了。
Android第九讲笔记(xUtils框架,Gson框架)_第8张图片

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() {
     

            }
        });

    }
}

结果图
Android第九讲笔记(xUtils框架,Gson框架)_第9张图片

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

主要需要更改Student类
因为在本案例的接收到的json对象中中的的其中一个键值是"class"
而"class"是java的关键字
@SerializedName这个注解作用:属性重命名,可以将json中的属性名转为我们自己自定义的属性名
就可以将下面定义的属性名改为class而不冲突
Android第九讲笔记(xUtils框架,Gson框架)_第10张图片
Android第九讲笔记(xUtils框架,Gson框架)_第11张图片

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类
Android第九讲笔记(xUtils框架,Gson框架)_第12张图片
Android第九讲笔记(xUtils框架,Gson框架)_第13张图片

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中的数据问题。
Android第九讲笔记(xUtils框架,Gson框架)_第14张图片
点击右键选择Generate,点击GsonFormatPlus

Android第九讲笔记(xUtils框架,Gson框架)_第15张图片

第一次使用可以设置一下
Android第九讲笔记(xUtils框架,Gson框架)_第16张图片
Android第九讲笔记(xUtils框架,Gson框架)_第17张图片
Android第九讲笔记(xUtils框架,Gson框架)_第18张图片
即可自动生成
Android第九讲笔记(xUtils框架,Gson框架)_第19张图片

补充

1.学会打断点

当出现问题的时候学会打断点进行查错,点击爬虫进行单步运行
Android第九讲笔记(xUtils框架,Gson框架)_第20张图片
当我们运行到这句话时,我们发现student的classname1属性是空的,可以发现问题应该是出现在这里。从而进行排查。

Android第九讲笔记(xUtils框架,Gson框架)_第21张图片

2.构造接口的平台

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

3.图床的使用

图床是什么呢,图床可以将本地的图片上传至服务器,针对每个图片提供一个唯一的url,借助这个url就可以将图片展示到其他网页上。
我使用了一个免费的图床有一段时间了,个人感觉还不错
遇见图床
将自己本地的图片上传之后,就能拿到url了。
Android第九讲笔记(xUtils框架,Gson框架)_第22张图片
听说还可以自己搭建图床,待补

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

先放个演示

过几天有时间源码放在github上可供大家参考,批评指正。

你可能感兴趣的:(android开发,笔记,android,android,studio,安卓)