我有一个类实体如下
@Entity
public class Task {
private String name;
private Integer ParentId;
private Integer userId;
@Ignore
private int noOfSubTask;
}
Run Code Online (Sandbox Code Playgroud)
在DAO类中有一个方法getTaskList()
@Dao
public interface TaskDao extends Dao<Task> {
@Query("SELECT *,(SELECT count(*) FROM Task b WHERE a._id = b.ParentId ) AS noOfSubTask FROM Task a ")
LiveData<List<Task>> getTaskList();
}
Run Code Online (Sandbox Code Playgroud)
我想用noOfSubTask填充由(SELECT count(*)FROM Task b WHERE a._id = b.ParentId)部分查询给出的数字,但问题是它不是一列,所以房间库不会映射它getTaskList方法in dao实现(自动生成)类.
有没有办法用dao类房间库的任何方法来填充实体的非列字段(比如我的情况下的noOfSubTask)?
java sqlite android android-room android-architecture-components
我正在尝试以编程方式备份房间数据库.
为此,我只是复制.sqlite包含整个数据库的文件
但是,在复制之前,由于房间已启用提前写入日志,我们必须关闭数据库,以便将-shm文件和-wal文件合并为单个.sqlite文件.正如这里指出的那样
我.close()在RoomDatabase对象上运行:
一切正常,备份,但是,稍后,当我尝试执行INSERT查询时,我收到此错误:
android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1)
Run Code Online (Sandbox Code Playgroud)
关闭后如何才能正确地重新打开房间数据库?
PS:.isOpen()在RoomDatabase对象返回true前INSERT
房间版: 1.1.1-rc1
sqlite android sqliteopenhelper android-room android-architecture-components
我正在制作支持不同设备方向的应用程序。导航由 Android Jetpack 的 Navigation 执行。横向应用程序主屏幕如下所示。它是列表包装片段(它是NavHostFragment,它被添加到fragment标签中的活动布局),包装包括列表片段(fragment)和详细信息片段(FrameLayout)。纵向方向是相似的(包装器和列表在其中,详细信息可访问抛出导航)。
我的问题是在更改设备方向后出现异常
java.lang.IllegalStateException: 没有当前导航节点
带有模拟数据的布局的第一个版本工作正常,在我将 ROOM 添加到我的应用程序、新订单和更新订单片段后出现错误。很遗憾,我无法更准确地定位错误源。
列出包装器代码
class OrderListWrapperFragment : RxFragment() {
private val disposable = CompositeDisposable()
var selectedOrderId: Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val bundle = savedInstanceState ?: arguments
bundle?.let {
selectedOrderId = it.getLong(EXTRA_ORDER_ID)
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.orders__list_wrapper, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initializeToolbar(toolbar, …Run Code Online (Sandbox Code Playgroud) android android-fragments kotlin android-architecture-components
PagedList<Object>用于Android的酷分页库.要使问题尽可能小:如果我有一个字符串列表,如
List<String> stringList; // it consists of 200 strings
Run Code Online (Sandbox Code Playgroud)
我想转换 stringList为PagedList<String>类似的类型
PagedList<String> pagedStringList;
Run Code Online (Sandbox Code Playgroud)
而且,如果我有一个PagedList<Object>如何将其转换为List<Object>?我经历了这个以供参考
如果我尝试相反的方式....
我怎么能转换List<Object>成DataSource.Factory<Integer, Object>..所以间接我可以把它转换成PagedList<>?
从
DataSource.Factory<Integer, Object>我可以转换为PagedList<>但我怎么能转换list成PagedList<>?
android rx-java2 android-livedata android-architecture-components android-jetpack
我正在使用Android导航组件进行导航.我有一个LoginFragment,它有一个按钮可以转换到SignUpFragment.单击按钮我收到此错误.
java.lang.IllegalStateException: View android.support.v7.widget.AppCompatButton{49d9bd1 VFED..C.. ...P.... 201,917-782,1061 #7f090172 app:id/signUpLink} does not have a NavController set
Run Code Online (Sandbox Code Playgroud)
这是我的nav_graph.xml
<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="org.fossasia.openevent.app.core.auth.login.LoginFragment"
android:label="login_fragment"
tools:layout="@layout/login_fragment">
<action
android:id="@+id/action_loginFragment_to_signUpFragment"
app:destination="@id/signUpFragment" />
</fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)
以下是LoginFragment for Navigation中的代码 -
binding.signUpLink.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_signUpFragment, null));
Run Code Online (Sandbox Code Playgroud)
以下是NavHostFragment的活动布局文件的摘录 -
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:name="android.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_navigation"
app:defaultNavHost="true"/>
Run Code Online (Sandbox Code Playgroud) android android-architecture-components android-architecture-navigation
我正在重写我的简单UI应用程序以使用导航架构组件,我需要传递一个实现Parcelable的Pojo,没有看到任何关于如何做到这一点的文档.
任何帮助,将不胜感激.
android android-fragments android-architecture-components android-jetpack
我正在尝试使用Android文档中描述的LiveData实现DB Observer .
只要我在Kotlin编程,我就会调整函数(最初用Java编写).
在尝试保存数据时,我发现了这个问题.
Cannot assign to ‘value’: the setter is protected/*protected and package*/ for synthetic extension in ‘<library Grade: android.arch.livecycle:livedata-core-1.1.1>’
Run Code Online (Sandbox Code Playgroud)
有人有这个问题吗?
这是我的代码:
视图模型:
class ProfileViewModel: ViewModel() {
object FirstName: MutableLiveData<String>()
fun getCurrentName(): LiveData<String> {
return FirstName
}
}
Run Code Online (Sandbox Code Playgroud)
分段
class ProfileFragment{
private lateinit var model: ProfileViewModel
// this is called onViewCreated. inputFirstName is an Edittext.
override fun setUp() {
model = ViewModelProviders.of(this).get(ProfileViewModel::class.java)
val nameObserver = Observer<String> { firstName ->
inputFirstName.text = SpannableStringBuilder(firstName)
}
model.getCurrentName().observe(this, nameObserver)
} …Run Code Online (Sandbox Code Playgroud) android kotlin android-livedata android-architecture-components
我有一个 ListFragment 有一个 recyclerview 和 onClick 任何项目打开 DetailsFragment。详细信息片段在底部包含另一个显示“更多项目”的回收站视图。现在 onClick 任何这些项目应该打开该特定项目的 DetailsFragment。基本上片段需要刷新。
过去,我只会使用 fragmentManager 替换 fragment。我如何去刷新片段?如何创建指向同一个片段的动作?
android android-fragments android-architecture-components android-jetpack android-architecture-navigation
我正在学习ViewModel,LiveData并且在此过程中产生了疑问。
如果我需要启动一个,我应该怎么做Activity?
是否可以将上下文作为参数传递给ViewModel(上下文不会存储在 ViewModel 中)?
ActivityAViewModel : ViewModel() {
// ...
fun openActivityB(context: Context) {
context.startActivity(...)
}
// ...
}
ActivityA {
// ...
fun onSomethingHappened() {
viewModel.openActivityB(this)
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果不是,在这种情况下最正确的做法是什么?
android viewmodel android-viewmodel android-architecture-components
android ×10
android-architecture-components ×10
android-architecture-navigation ×2
android-room ×2
kotlin ×2
sqlite ×2
java ×1
rx-java2 ×1
viewmodel ×1