Articles of android architecture components

Android室错误:types转换器无法识别列表的枚举

房间库不识别我为枚举List创build的TypeConverter 。 但是,当我将其更改为枚举的ArrayList它工作正常。 任何人有任何想法,为什么和我能做些什么来使这个工作与List ? (在Kotlin中使用列表更容易,我真的不希望只是因为这个原因转换回ArrayList )。 这是我的代码: 我的模特: @Entity data class Example(@PrimaryKey val id: String?, val name: String, var days: List<DayOfWeek>?) DayOfWeek是一个枚举: enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; val value: Int get() = ordinal + 1 companion object { private val ENUMS = DayOfWeek.values() fun of(dayOfWeek: Int): DayOfWeek { […]

Android室:顺序不工作

我正在使用新的android ORM房间。 我面临着问题。 ORDER BY与参数不起作用。 如果我想使用ORDER BY参数中的字段,这是行不通的。 没有任何东西。 @Query("SELECT * FROM User ORDER BY :orderBY ASC") List<User> sortedFind(String orderBY); 但是,当我把这个领域直接sorting,那么它是按预期工作。 @Query("SELECT * FROM User ORDER BY name ASC") List<User> sortedFind(); 是android房间的bug,还是我做错了什么?

了解Android架构组件示例GithubBrowserSample:ViewModelModule,ViewModel参数

Android架构组件最新的样本之一是Google提供的GithubBrowserSample 。 我审查了代码,出现了一些问题: 我注意到, ViewModelModule包含在AppModule中 。 这意味着所有的视图模型都被添加到DI图中。 为什么这样做,而不是为每个活动/片段提供单独的Module ,将只提供特定的活动/片段所需的ViewModel ? 在这个具体的例子中,哪里viewmodels使用GithubViewModelFactory实例化有没有办法将parameter passing给特定的ViewModel ? 或者更好的解决scheme是在ViewModel创build一个setter,并通过setter设置需要的参数?

Android空间可重复使用的通用基类DAO

有没有什么办法用Android的房间创build可重用的通用基类DAO? public interface BaseDao<T> { @Insert void insert(T object); @Update void update(T object); @Query("SELECT * FROM #{T} WHERE id = :id") void findAll(int id); @Delete void delete(T object); } public interface FooDao extends BaseDao<FooObject> { … } public interface BarDao extends BaseDao<BarEntity> { … } 我一直无法find任何方法来实现这一点,而不必声明相同的接口成员,并为每个子类编写查询。 当处理大量类似的DAO时,这变得非常单调乏味。

由于缺less方法而导致启动前报告失败(在com.google.android.apps.mtaas.crawler-1 / base.apk中)

由于最近我的应用程序开始在启动前报告中包含奇怪的错误消息(上传到Play商店后自动生成)。 这些报告包含以下例外情况: Exception java.lang.NoSuchMethodError: No interface method a(Landroid/arch/lifecycle/e;Landroid/arch/lifecycle/b$a;)V in class Landroid/arch/lifecycle/GenericLifecycleObserver; or its super classes (declaration of 'android.arch.lifecycle.GenericLifecycleObserver' appears in /data/app/com.google.android.apps.mtaas.crawler-1/base.apk) android.arch.lifecycle.f$aa (f.java:326) android.arch.lifecycle.fa (f.java:159) com.firebase.ui.database.FirebaseRecyclerAdapter.<init> (FirebaseRecyclerAdapter.java:40) 和: Exception java.lang.NoSuchMethodError: No static method a(Landroid/app/Activity;)V in class Landroid/arch/lifecycle/ReportFragment; or its super classes (declaration of 'android.arch.lifecycle.ReportFragment' appears in /data/app/com.google.android.apps.mtaas.crawler-1/base.apk) android.arch.lifecycle.LifecycleDispatcher$DispatcherActivityCallback.onActivityCreated (LifecycleDispatcher.java:77) android.app.Application.dispatchActivityCreated (Application.java:219) android.app.Activity.onCreate (Activity.java:1040) android.support.v4.app.SupportActivity.onCreate (SupportActivity.java:66) […]

与MVP的Android架构组件

新的Android体系结构组件发布在谷歌IO 17。 那么我们应该使用MVP与架构组件和MVVM? 在Github的google示例中,他们使用了MVVM模型。 Google示例

unit testing室和LiveData

我目前正在开发一个应用程序使用新的Android架构组件 。 具体来说,我正在实现一个房间数据库,在其中一个查询返回一个LiveData对象。 插入和查询按预期工作,但我有一个问题,使用unit testingtesting查询方法。 这是我试图testing的DAO: NotificationDao.kt @Dao interface NotificationDao { @Insert fun insertNotifications(vararg notifications: Notification): List<Long> @Query("SELECT * FROM notifications") fun getNotifications(): LiveData<List<Notification>> } 正如你所看到的,查询函数返回一个LiveData对象,如果我改变这只是一个List , Cursor或基本上无论那么我得到预期的结果,这是数据库中插入的数据。 问题是,以下testing总是失败,因为LiveData对象的值始终为null : NotificationDaoTest.kt lateinit var db: SosafeDatabase lateinit var notificationDao: NotificationDao @Before fun setUp() { val context = InstrumentationRegistry.getTargetContext() db = Room.inMemoryDatabaseBuilder(context, SosafeDatabase::class.java).build() notificationDao = db.notificationDao() } […]

如何处理LiveData的错误状态?

在某些情况下,新的LiveData可以用作RxJava的observables的替代品。 但是,与Observable不同的是, LiveData没有错误callback。 我的问题是:我应该如何处理LiveData错误,例如,当它由某个networking资源支持时,由于IOException可能无法检索?

我怎样才能代表与Android室的多对多关系?

我怎样才能代表与房间的多对多关系? 例如我有“客人”和“保留”。 预订可以有许多客人和一位客人可以成为许多预订的一部分。 这是我的实体定义: @Entity data class Reservation( @PrimaryKey val id: Long, val table: String, val guests: List<Guest> ) @Entity data class Guest( @PrimaryKey val id: Long, val name: String, val email: String ) 在查看文档时,我遇到了@Relation 。 我发现它真的很混乱。 根据这个我想创build一个POJO并在那里添加关系。 所以,以我的例子,我做了以下 data class ReservationForGuest( @Embedded val reservation: Reservation, @Relation( parentColumn = "reservation.id", entityColumn = "id", entity = […]

如何在扩展LifecycleActivity的视图中设置SupportActionBar

我有一个活动扩展AppCompactActivity,并在onCreate方法我设置Toolbar使用setSupportActionBar方法通常的方式: public class StepMasterActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_step_master); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);` } } 但现在我有一个ViewModel组件,并在这个活动的子节点之间共享数据,并pipe理生命周期,我必须在Activity中获得这个组件,所以我做了这个扩展LifecycleActivity。 public class StepMasterActivity extends LifecycleActivity { @Override public class StepMasterActivity extends LifecycleActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_step_master); // setToolbar(); SharedViewModel sharedViewModel = ViewModelProviders.of(this).get(SharedViewModel.class); } } 但是我注意到LifecycleActivity与AppCompatActivity无关,都不是FragmentActivity。 public class […]