【Android学习】学习笔记(语法类)

92 阅读6分钟

Android的学习语法和iOS有很多类似的地方,通过记录日常开发Android的的经验,总结一下常用语法实现的经验,仅以此记录,开发的过程中碰到的时间开发问题。

1.替换后台返回字段

public class StoreEntity implements Serializable {
    // 替换后台返回字段名称
    @SerializedName("STORE_NAME")
    public String storeName; // 店名
    @SerializedName("STORE_CODE")
    public String storeCode; // 店号
}

使用注解 @SerializedName包裹原始字段,然后定义一个新字段替换即可.

2.遍历一个实体类,得到一个新的实体类

  // 设置数据
 // 遍历实体类【Entity】数组
  stores.clear();
for (StoreEntity storeEntity : data.data) {
    // 核心代码
    stores.add(new TextEntity(storeEntity.storeName));
}
  storeAdapter.setList(stores);

其中StoreEntity为原始实体类,TextEntity为新的实体类

3.字符串数组的分隔成一个新的数组

stores.clear();
if (!TextUtils.isEmpty(recordEntity.storeNames)) {
    Log.d("测试OK---",recordEntity.storeNames);
    // 字符串数组分隔核心代码
    String[] tempStores = recordEntity.storeNames.split(",");
    for (int i = 0; i<tempStores.length; i++) {
        stores.add(new TextEntity(tempStores[i]));
    }
}

4.Android中实体类里面操作setter/getter方法

当你需要在 Android 中设置 getter 和 setter 方法时,你可以创建一个具有私有字段和公共 getter/setter 方法的实体类。以下是一个示例:

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在上面的示例中,Person 类具有私有字段 nameage,以及公共的 getter 和 setter 方法用于访问和修改这些字段。

你可以使用以下代码示例来设置和获取 Person 对象的属性值:

// 创建 Person 对象
Person person = new Person();

// 设置属性值
person.setName("John");
person.setAge(25);

// 获取属性值
String name = person.getName();
int age = person.getAge();

通过调用 setName()setAge() 方法,你可以设置 Person 对象的属性值。然后,通过调用 getName()getAge() 方法,你可以获取相应的属性值。

这样,通过使用 getter 和 setter 方法,你可以在需要时对属性进行验证、数据转换或其他处理,并且可以更好地控制属性的访问和修改。

image.png

image.png

理解了就很简单,和OC中的模型有点类似,

1.修饰词需要使用privite

2.setter中需要this

3.getter中改变字段的值,,对外其实getter获取值、setter设置值,可以看第二张图。

5.关键字instanceof

if(result instanceof Result.Success){
}

instanceof 是Java 的一个二元操作符,类似于==,>,< 等操作符。 instanceof 是Java 的保留关键字。 它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean 的数据类型。

6.关键字protected

在 Java 中,protected 是一个访问修饰符,用于限制类的成员(字段、方法)的访问范围。具体来说,使用 protected 修饰的成员可以被以下几种访问:

  1. 同包下的类:在同一个包内的其他类可以访问 protected 成员。
  2. 子类:无论子类在同一个包内还是不同包内,都可以访问父类中使用 protected 修饰的成员。 protected 修饰符对比其他访问修饰符的区别如下:
  • public:任何类都可以访问 public 成员。
  • protected:只有同一包内的类和子类可以访问 protected 成员。
  • default (package-private):如果没有使用任何修饰符(即不写任何修饰符),则成员具有默认访问权限,即同一个包内的类可以访问。
  • private:只有同一个类内部可以访问 private 成员,其他类无法访问。 在使用 protected 关键字时,需要注意以下几点:
  • protected 成员对于包外的类来说,无法直接访问。只有在子类中通过继承可以访问。
  • 在访问 protected 成员时,不需要通过实例化对象,可以直接访问父类的 protected 成员(当然,如果在不同包下,必须是子类才能直接访问)。
  • protected 修饰符用于实现类之间的继承和扩展关系,提供了一定程度的封装性和灵活性。

在 Android 开发中,protected 关键字常用于以下情况:

  • Activity 或者 Fragment 的子类中,使用 protected 修饰方法,以便子类可以重写这些方法来定制特定的行为。
  • 在自定义控件或者工具类中,使用 protected 修饰一些字段或者方法,以便继承这些类的子类可以访问和修改这些字段或者方法。 总结来说,protected 关键字在 Java 中是用于限制访问权限,主要用于继承和扩展类的关系,使得子类可以访问父类的一部分实现,并在此基础上进行扩展。

7.关键字abstract

在 Android 开发中,abstract 是一个关键字,用于定义抽象类(abstract class)或抽象方法(abstract method)。这些抽象类和方法具有以下特点和用法:

抽象类(abstract class)

抽象类用 abstract 关键字修饰,它本身不能被实例化,主要用于定义接口和共享代码的结构,子类必须实现其抽象方法。

示例:

// 定义一个抽象类 Animal
public abstract class Animal {
    
    // 抽象方法,子类必须实现
    public abstract void makeSound();
    
    // 普通方法,子类可以选择性覆盖
    public void eat() {
        System.out.println("Animal is eating");
    }
}

在上面的例子中,Animal 类是抽象的,因为它包含了一个抽象方法 makeSound()。任何继承自 Animal 的子类都必须实现 makeSound() 方法,否则会导致编译错误。

抽象方法(abstract method)

抽象方法只有声明,没有实现,它用 abstract 关键字标记,且必须出现在抽象类中。子类继承抽象类后,必须实现其所有的抽象方法才能正常编译。

示例:

// 继承抽象类 Animal,并实现 makeSound 方法
public class Dog extends Animal {
    
    // 实现抽象方法
    @Override
    public void makeSound() {
        System.out.println("Bark bark");
    }
}

在这个示例中,Dog 类继承了 Animal 抽象类,并实现了 makeSound() 方法,这样 Dog 类就可以被实例化和使用了。

使用抽象类和抽象方法的优点:

  1. 代码重用和结构定义:抽象类可以定义通用的行为和结构,减少重复代码。
  2. 强制实现规范:抽象方法强制子类实现特定的方法,确保子类拥有共同的接口。
  3. 多态性支持:抽象类可以被多个子类继承,提供多态性的支持。

在 Android 开发中,抽象类常用于定义基础组件或者共享逻辑,例如 FragmentAsyncTask 等,这些类通过抽象方法或者默认实现提供了框架的基础,同时允许开发者根据具体需求进行扩展和定制。

8.RecycleView更新数据过程中,使用SmartRefreshLayout加载更多出现数据列表数据不更新的情况

image.png

//         刷新列表
//        adapter.setNewInstance(datas);
        adapter.setList(datas);
//        adapter.notifyDataSetChanged();

上述图片中的写法也可以在加载更多的时候刷新,单独使用setNewInstance则不能,但是,其方法内部包含了notifyDataSetChanged(),很奇怪的一个问题,最后接受了文档中的建议,如非必要,一般直接使用setList()就可以。参考