JetpackはAPIデータをリストビューに作成する
14812 ワード
何度もデータを取得し、そのデータをリストを使用して表示するAPI呼び出しを行う必要があります.ここでは、どのように構成することを示します.アプリケーションの構造を説明するには、次の図を見てみましょう
まず、AndroidManifestでアプリケーションにインターネットアクセス許可を追加します.XML
藤堂apiservice
ネットワーク要求を送信するためのレトロフィットインスタンスを作成する必要があります.レトロフィットビルダークラスを使用し、サービスの基本URLを指定する必要があります.ここでは1つのすべてのtodosを取得し、リストにdesialiseを取得する
藤堂ビューモデル
ビューモデルは、Toolistを発行し、すべてのToDOSを取得するために使用するビューのGetToolist関数を持っています
藤堂ビュー
最後に、任意のToDoリストの状態変化のViewModelを監視するビューがあります.ToDoリストは、ビューに表示されます.起動時にAPIの呼び出しを行います.
まず、AndroidManifestでアプリケーションにインターネットアクセス許可を追加します.XML
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
始める前に、ビルドを更新しましょう.Gradleファイルには、GSONとJSONのシリアル化のためのGSONを使用したHTTPクライアントとAconverterがあります.dependencies{
...
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.0.0"
}
藤堂apiservice
ネットワーク要求を送信するためのレトロフィットインスタンスを作成する必要があります.レトロフィットビルダークラスを使用し、サービスの基本URLを指定する必要があります.ここでは1つのすべてのtodosを取得し、リストにdesialiseを取得する
data class Todo(
var userId: Int,
var id: Int,
var title: String,
var completed: Boolean
)
const val BASE_URL = "https://jsonplaceholder.typicode.com/"
interface APIService {
@GET("todos")
suspend fun getTodos(): List<Todo>
companion object {
var apiService: APIService? = null
fun getInstance(): APIService {
if (apiService == null) {
apiService = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build().create(APIService::class.java)
}
return apiService!!
}
}
}
藤堂ビューモデル
ビューモデルは、Toolistを発行し、すべてのToDOSを取得するために使用するビューのGetToolist関数を持っています
class TodoViewModel : ViewModel() {
private val _todoList = mutableStateListOf<Todo>()
var errorMessage: String by mutableStateOf("")
val todoList: List<Todo>
get() = _todoList
fun getTodoList() {
viewModelScope.launch {
val apiService = APIService.getInstance()
try {
_todoList.clear()
_todoList.addAll(apiService.getTodos())
} catch (e: Exception) {
errorMessage = e.message.toString()
}
}
}
}
藤堂ビュー
最後に、任意のToDoリストの状態変化のViewModelを監視するビューがあります.ToDoリストは、ビューに表示されます.起動時にAPIの呼び出しを行います.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val vm = TodoViewModel()
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
TodoView(vm)
}
}
}
}
@Composable
fun TodoView(vm: TodoViewModel) {
LaunchedEffect(Unit, block = {
vm.getTodoList()
})
Scaffold(
topBar = {
TopAppBar(
title = {
Row {
Text("Todos")
}
})
},
content = {
if (vm.errorMessage.isEmpty()) {
Column(modifier = Modifier.padding(16.dp)) {
LazyColumn(modifier = Modifier.fillMaxHeight()) {
items(vm.todoList) { todo ->
Column {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween
) {
Box(
modifier = Modifier
.fillMaxWidth()
.padding(0.dp, 0.dp, 16.dp, 0.dp)
) {
Text(
todo.title,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
Spacer(modifier = Modifier.width(16.dp))
Checkbox(checked = todo.completed, onCheckedChange = null)
}
Divider()
}
}
}
}
} else {
Text(vm.errorMessage)
}
}
)
}
Reference
この問題について(JetpackはAPIデータをリストビューに作成する), 我々は、より多くの情報をここで見つけました https://dev.to/paulallies/jetpack-compose-api-data-to-list-view-5fkiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol