Переключение слоя данных на использование JSON
305
В этом примере
GENERICIZED_DATA_TYPE
представляет произвольное количество
типов данных, которые могут быть обобщенными типами. Это
может быть
простой тип, как, например,
new
TypeToken
...
, или тип со множеством вло
-
женных слоев, как, например,
new
TypeToken
tring,
List
>>...
Но вернемся к нашему примеру. Этот новый источник данных автоматиче
-
ски будет совместим с адаптером и представлением
RecyclerView
, и вам ничего
не придется менять в коде адаптера; главное – не забыть передать параметр
Context
конструктору источника данных, чтобы тот мог найти правильный ка
-
талог с файлами:
Java
recyclerView.setAdapter(new BrowseBooksAdapter(new Books(context)));
Kotlin
recyclerView.adapter = BrowseBooksAdapter(Books(context))
Другой интересный трюк основывается на том факте, что
Books
сам является
списком объектов
Book
, поэтому файл можно прочитать не с использованием
измененного источника данных из предыдущего кода, а с помощью вспомо
-
гательного метода и библиотеки Gson для преобразования содержимого непо
-
средственно в источник данных. Предположим, что мы вернулись к исходному
классу
Books
без методов:
Java
public class Books extends ArrayList implements BookDataSource {}
Kotlin
class Books : ArrayList(), BookDataSource
Предположим также, что у нас есть методы, описанные в главе 6. Мы можем
реализовать следующий метод
onCreate
в
Ac ti vi ty
:
Java
public class BrowseContentAc ti vi ty extends Ac ti vi ty {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browse);
RecyclerView recyclerView = findViewById(R.id.browse_content_recyclerview);
try {
InputStream stream = getAssets().open("catalog.json");
String json = Files.getStringFromStream();
Books source = new Gson().fromJson(json, Books.class);
BrowseBooksAdapter adapter = new BrowseBooksAdapter(source);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
} catch (IOException e) {
Log.d("MyApp", "Oops! Something went wrong trying to read our catalog json");
}
}
}
306
Моделирование
каталога библиотеки
Kotlin
class BrowseContentAc ti vi ty : Ac ti vi ty() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_browse)
val recyclerView = findViewById
(R.id.browse_content_recyclerview)
try {
val stream = assets.open("catalog.json")
val json = Files.getStringFromStream(stream)
val source = Gson().fromJson(json, Books::class)
val adapter = BrowseBooksAdapter(source)
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
} catch(e: IOExeption) {
Log.d("MyApp", "Oops! Something went wrong trying to read our catalog json")
}
}
}
Поскольку экземпляр
Books
является также списком
ArrayList
, он будет запол
-
няться информацией о книгах из файла
Do'stlaringiz bilan baham: