最近我正在探索谷歌最近推出的Android架构.从文档中我发现了这个:
public class MyViewModel extends ViewModel {
private MutableLiveData<List<User>> users;
public LiveData<List<User>> getUsers() {
if (users == null) {
users = new MutableLiveData<List<Users>>();
loadUsers();
}
return users;
}
private void loadUsers() {
// do async operation to fetch users
}
}
Run Code Online (Sandbox Code Playgroud)
活动可以按如下方式访问此列表:
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, users -> {
// update UI
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在loadUsers()
我正在异步获取数据的函数中,我将首先检查数据库(Room)中的数据,如果我没有得到数据,我将进行API调用以从Web服务器获取数据.然后我将获取的数据插入数据库(Room)并根据数据更新UI.建议的方法是什么?
如果我开始Service
从loadUsers()
方法中调用API ,我该如何更新MutableLiveData<List<User>> users …
android background-service viewmodel android-room android-architecture-components
WorkManager是一个用于排队工作的库,保证在满足约束条件后执行.
因此,在通过Constraints类之后,我没有找到任何函数来为工作添加时间约束.例如,我想在上午8:00开始工作(工作可以是OneTimeWorkRequest或PeriodicWorkRequest中的任何一种).如何使用WorkManager添加约束来安排此工作.
Java POJO对象
public class Section {
@ColumnInfo(name="section_id")
public int mSectionId;
@ColumnInfo(name="section_name")
public String mSectionName;
public int getSectionId() {
return mSectionId;
}
public void setSectionId(int mSectionId) {
this.mSectionId = mSectionId;
}
public String getSectionName() {
return mSectionName;
}
public void setSectionName(String mSectionName) {
this.mSectionName = mSectionName;
}
}
Run Code Online (Sandbox Code Playgroud)
我的查询方法
@Query("SELECT * FROM section")
LiveData<List<Section>> getAllSections();
Run Code Online (Sandbox Code Playgroud)
访问数据库
final LiveData<List<Section>> sections = mDb.sectionDAO().getAllSections();
Run Code Online (Sandbox Code Playgroud)
在下一行,我正在检查sections.getValue()
哪个总是给我null,虽然我在DataBase中有数据,后来我得到了onChanged()
方法中的值.
sections.observe(this, new Observer<List<Section>>() {
@Override
public void onChanged(@Nullable List<Section> sections){
}
});
Run Code Online (Sandbox Code Playgroud)
但是当我从查询中省略LiveData时,我正在按预期获取数据.查询方法:
@Query("SELECT * …
Run Code Online (Sandbox Code Playgroud) android android-room android-livedata android-architecture-components
这是我的 pojo 类
@Serializable
data class Response(
@SerialName("message") val message: String?,
@SerialName("parameters") val parameters: Map<String, String>?
)
Run Code Online (Sandbox Code Playgroud)
这是 Json,我试图从以下位置解码:
{
"message": "Some text"
}
Run Code Online (Sandbox Code Playgroud)
此处,该字段parameters
是可选的。当我尝试解码时
Json.decodeFromString<Response>(response)
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
kotlinx.serialization.MissingFieldException:序列名“Response”的类型需要字段“parameters”,但它丢失了
我期待将该字段设置parameters
为null
,如果该字段在Json
当我启动 时Activity
,我将一些数据传递给。它通过Intent
. 如何从可组合项内的 Intent 访问此数据?
我正在寻找一种直接Intent
从可组合项访问的方法。
在原生 android 项目中,我们可以定义 BuildConfig 变量,这些变量可以根据所选的构建类型(调试或发布)进行更改。为此,我们可以在应用程序级 gradle 文件中添加以下代码
buildTypes {
release {
buildConfigField 'String', "BASE_URL", '"https://stackoverflow.com/"'
}
debug {
buildConfigField 'String', "BASE_URL", '"https://qa.stackoverflow.com/"'
}
}
Run Code Online (Sandbox Code Playgroud)
我期待创建这样的全局配置变量,可以从共享模块以及 Android 和 iOS 模块(如果可能的话)访问。我怎样才能做到这一点?
当项目部分在屏幕外时,ItemTouchHelper.Callback默认调用interpolateOutOfBoundsScroll.但是,当项目逐渐拖动到屏幕底部时,如何滚动回收器视图.
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {
public static final float ALPHA_FULL = 1.0f;
private final ItemTouchHelperAdapter mAdapter;
private boolean isElevated;
public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
mAdapter = adapter;
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
// Set movement flags based on the layout manager
if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
final int …
Run Code Online (Sandbox Code Playgroud) android ×5
android-architecture-components ×2
android-room ×2
json ×1
kmm ×1
kotlin ×1
parsing ×1
viewmodel ×1