android - POJO类的本质

标签 android

请问我是 android 的新手,我需要完全理解 POJO 类在 android 中填充 recyclerview 的用法。我这样做的方法是从本地/API 获取数据,将其放入 2D ArrayList 并将其传递给 recyclerview 的适配器类,例如下面的代码从设备获取音乐并将其添加到音乐中二维 ArrayList :

musics.clear();
    musicResolver = getActivity().getContentResolver();
    Uri musicuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicuri, null, null, null, "LOWER(" + MediaStore.Audio.Media.TITLE + ")ASC");
    if (musicCursor != null) {
        while (musicCursor.moveToNext()) {
            ArrayList<String> tempmusic = new ArrayList<>();
            tempmusic.add(0, musicCursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
            long time = Integer.parseInt(musicCursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)));
            tempmusic.add(1, (new SimpleDateFormat("mm:ss", Locale.getDefault())).format(new Date(time)));
            tempmusic.add(2, musicCursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
            tempmusic.add(3, musicCursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

            musics.add(tempmusic); //2d array
        }
        musicCursor.close();
    }

    rvAdapter.notifyDataSetChanged();

我对上述方法没有问题,它工作正常,但我遇到了一个教程,其中使用了一个 POJO 类来实现 Serializable,见下文:

public class Audio implements Serializable {

private String data;
private String title;
private String size;
private String duration;

public Audio(String data, String title, String duration, String size) {
    this.data = data;
    this.title = title;
    this.duration = duration;
    this.size = size;
}

public String getData() {
    return data;
}

public String getTitle() {
    return title;
}

public String getDuration() {
    return duration;
}

public String getSize() {
    return size;
}
}

使用POJO类检索的方法:

//musics.clear();
musicResolver = getActivity().getContentResolver();
Uri musicuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicuri, null, null, null, "LOWER(" + MediaStore.Audio.Media.TITLE + ")ASC");
if (musicCursor != null) {
    while (musicCursor.moveToNext()) {
        ArrayList<String> tempmusic = new ArrayList<>();
String data = 
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
      String title = 
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
      String album = 
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
      String artist = 
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));

tempmusic.add(new Audio(data, title, album, artist));

    }
    musicCursor.close();
}

rvAdapter.notifyDataSetChanged();

现在我的问题是:

  1. 如果我能用2d arraylist实现整个操作,那么pojo类有什么用。
  2. 如果 pojo 类实现可序列化,这意味着什么以及它相对于使用普通 pojo 类或仅使用 2d arraylist 的优势

非常感谢清楚的解释,谢谢。

最佳答案

What is the usefulness of the pojo class

  • 术语“POJO”最初表示不遵循任何主要 Java 对象模型、约定或框架的 Java 对象;现在“POJO”也可以用作“Plain Old JavaScript Object”的首字母缩写词,在这种情况下,该术语表示具有相似血统的 JavaScript 对象

  • POJO 通常很简单,因此不会依赖于其他库、接口(interface)或注释。这增加了它可以在多种项目类型中重用的机会

阅读更多关于 Plain old Java object (POJO) 的信息从这里Advantage of POJO

If pojo class implements serializable, what does it mean and the advantage(s) it has over using an ordinary pojo class or just using a 2d arraylist

Serializable

  • 类的可序列化性由实现 java.io.Serializable 接口(interface)的类启用。不实现此接口(interface)的类将不会对其任何状态进行序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口(interface)没有方法或字段,仅用于标识可序列化的语义。

阅读serialization - advantages and disadvantages

关于android - POJO类的本质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034180/

相关文章:

android - 如何将 .aar 文件导入 Android Studio 1.1.0 并在我的代码中使用它

java - 在 Android 的 SharedPreferences 中将对象存储为 JSON 字符串是否是一种不好的做法?

带有 C++ UnsatisfiedLinkError 的 Android Studio JNI

android - NoSuchFieldError : PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING 错误

java - 切换图例可见性时 TChart 崩溃?

android - 在android应用程序中使用多个进程的优缺点是什么

android - 类型不匹配 : inferred type is Context? 但需要上下文 - Kotlin

java - Android MediaRecorder/Player无法录制或无法播放

Android 设备不断与 adb/eclipse 断开连接

android - AudioRecord 不适用于摩托罗拉里程碑