Articles of android architecture components

无法在Android架构组件1.1.1中find类DiffCallback:

最近我在gradle文件中更新了android.arch支持库版本 // ViewModel and LiveData implementation “android.arch.lifecycle:extensions:1.1.1” // alternatively, just ViewModel implementation “android.arch.lifecycle:viewmodel:1.1.1” // alternatively, just LiveData implementation “android.arch.lifecycle:livedata:1.1.1” annotationProcessor “android.arch.lifecycle:compiler:1.1.1” // Room (use 1.1.0-alpha1 for latest alpha) implementation “android.arch.persistence.room:runtime:1.0.0” annotationProcessor “android.arch.persistence.room:compiler:1.0.0” // Paging implementation “android.arch.paging:runtime:1.0.0-alpha7” 现在我声明得到这个错误

无法解决:添加谷歌架构组件依赖项时支持片段错误

我想在我的应用程序中使用Google架构组件,但在将android工作室更新到版本3.1.1后,当我将android.arch.lifecycle:extensions:1.1.1依赖项添加到app.gradle文件时,它将显示Failed to resolve: support-fragment 我的gradle版本是4.4 这是app gardle: apply plugin: ‘com.android.application’ android { compileSdkVersion 27 defaultConfig { applicationId “ir.apptori.myapplication” minSdkVersion 17 targetSdkVersion 27 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } } dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) implementation ‘com.android.support:appcompat-v7:27.1.1’ implementation ‘com.android.support.constraint:constraint-layout:1.0.2’ testImplementation ‘junit:junit:4.12’ androidTestImplementation […]

如何与Android Room Persistence Library实现多对多的关系?

如何与Android Room Persistence Library实现多对多的关系? 一个用户可能拥有一个或多个设备,一个设备可能由一个或多个用户拥有。 @Entity public class User { public @PrimaryKey Long id; public String userName; } @Dao public interface UserDao { @Query(“select * from user”) List getAllUsers(); @Query(“select * from user where id = :id”) User getUserById(long id); } @Entity public class Device { public @PrimaryKey Long id; public String name; } @Dao […]

我正在使用android分页库,但不是在块中获取数据我一次性获得完整列表

我们使用数据源加载pagedlist的ViewModel类。 public class RecipeListViewModel extends ViewModel { public LiveData<PagedList> mutableLiveData; public void init(RecipeFrom recipeFrom, RecipeDao recipeDao) { mutableLiveData = new LivePagedListBuilder(recipeDao.getRecipeList(),10).build(); } } 这是我的dao,我们以数据源工厂的forms获取数据。 @Dao public interface RecipeDao { @Query(“select * from recipe”) public DataSource.Factory getRecipeList(); } 在我的RecipeListPojo里面,我创建了DiffCallBack。 public static DiffUtil.ItemCallback diffCallback=new DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame(RecipeListPojo oldItem, RecipeListPojo newItem) { return oldItem.getId()==newItem.getId(); } […]

Android workmanager预定工作人员在任务被杀后丢失

我正在尝试使用新的WorkManager API 1.0.0-alpha06每15分钟运行一次工作。 如果我没有错,使用带有PeriodicWorkRequest的工作管理器应该让工作人员彻底杀死任务并重新启动电话,但是当我从最近的应用程序中滑动任务时,预定的工作人员会丢失(我等了大约45分钟才看到任何人工人的日志安排15分钟间隔)。 这些是我的文件: MyExampleWorker.java: public class MyExampleWorker extends Worker{ public static final String TAG = “MY_EXAMPLE_WORKER”; @NonNull @Override public Result doWork() { Log.i(TAG, “Starting background worker”); // Getting configuration data long param1 = getInputData().getLong(“param1”, 60000); String param2 = getInputData().getString(“param2”); String param3 = getInputData().getString(“param3”); PackageManager pckMgr = mContext.getPackageManager(); … .. . return Result.SUCCESS; } […]

Android架构组件ViewModel – 如何在测试Activity上模拟ViewModel?

我正在尝试设置类似于GithubBrowserSample的 UI测试,看起来示例项目只有Frag的模拟ViewModel而不是Activity的示例。 这是我的代码,我试图通过模拟ViewModel来测试Activity 。 但ViewModel未在Activity中的onCreate()之前设置。 @RunWith(AndroidJUnit4::class) class MainActivityTest { val viewModel = mock(MainViewModel::class.java) @Rule @JvmField val activityRule = ActivityTestRule(MainActivity::class.java, true, true) private val liveData = MutableLiveData<Resource>() @Before open fun setUp() { activityRule.activity.viewModelFactory = createViewModelFor(viewModel) `when`(viewModel.liveData).thenReturn(liveData) viewModel.liveData?.observeForever(mock(Observer::class.java) as Observer<Resource>) liveData.postValue(Resource.success(Object())) } fun createViewModelFor(model: T): ViewModelProvider.Factory = object : ViewModelProvider.Factory { override fun create(modelClass: Class): T { […]

如何使用Android的架构组件完成ViewModel的活动?

我试图弄清楚如何以最佳方式完成ViewModel中的Activity。 我find了使用LiveData对象并发出“信号”的一种方法。 我怀疑这个解决方案有一个开销。 那么它是正确的解决方案还是我应该使用更准确? 所以举个例子:让我们假设在一个应用程序中是一个活动MainActivity和视图模型,如下所示: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val model = ViewModelProviders.of(this).get(MainViewModel::class.java) model.shouldCloseLiveData.observe(this, Observer { finish() }) } } 并且作为MainActivity的伴侣是MainViewModel,如下所示: class MainViewModel(app: Application) : AndroidViewModel(app) { val shouldCloseLiveData = MutableLiveData() fun someAction(){ shouldCloseLiveData.postValue(null) } }

MVVM Dagger2与组件中存在匹配键的绑定

我正在使用以下谷歌示例项目: https : //github.com/googlesamples/android-architecture-components作为我的新项目的参考,并且在尝试向项目添加第二个活动时遇到困难。 这是编译时遇到的错误 Error:(22, 8) error: [dagger.android.AndroidInjector.inject(T)] com.apps.myapp.ui.common.MainActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method. This type supports members injection but cannot be implicitly provided. com.apps.myapp.ui.common.MainActivity is injected at com.apps.myapp.ui.common.NavigationController.(mainActivity) com.apps.myapp.ui.common.NavigationController is injected at com.apps.myapp.ui.addContacts.AddContactsFragment.navigationController com.apps.myapp.ui.addContacts.AddContactsFragment is injected at dagger.android.AndroidInjector.inject(arg0) A binding with matching key exists in component: […]

房间“不确定如何将光标转换为此方法的返回types”:哪种方法?

Error:Not sure how to convert a Cursor to this method’s return type Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’. Compilation failed; see the compiler error output for details. 使用Room我收到此错误,我想找出导致它的方法。 我有多个DAO ,共有大约60种方法,这个错误刚刚添加一个方法后popup(从另一个完美复制并粘贴,只需将字段更改为设置)。 我可以发布全类DAO ,但是我想知道哪种方法失败了 。 我尝试使用Run with –stacktrace , Run with –info和–debug option ,但这些都没有显示任何有价值的信息。 我添加的方法是带有Int返回types的@Query UPDATE ,如文档中所建议的那样 UPDATE或DELETE查询可以返回void或int。 如果是int,则该值是受此查询影响的行数。 编辑:我想补充一点,我尝试删除该方法,使DAO回到工作状态,但它仍然给我这个错误。 EDIT2:添加gradle控制台输出,因为在评论中不可读: error: Not sure how to convert a […]

Room – LiveData观察者在数据库更新时不会触发

我试图在下面的代码中find,为什么一旦我用新数据填充数据库,Room的LiveData observable就不会给我新的转变。 这是我的活动的onCreate方法: shiftsViewModel = ViewModelProviders.of(this).get(ShiftsViewModel.class); shiftsViewModel .getShifts() .observe(this, this::populateAdapter); 这是populateAdapter方法: private void populateAdapter(@NonNull final List shifts){ recyclerView.setAdapter(new SimpleItemRecyclerViewAdapter(shifts)); } 我还有以下代码填充数据库(我使用RxJava在IO线程上完成工作,因为Room需要在主线程之外调用它的代码): @Override public Observable<List> persistShifts(@NonNull final List shifts){ return Observable.fromCallable(() -> { appDatabase.getShiftDao().insertAll(shifts); return shifts; }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } 在我开始观察我的shiftViewModel之后调用persistShifts时出现的问题。 我希望我的观察者(LiveData)会被所有新添加的class次触发。 结果是观察者被触发,但是返回了一个空的移位列表。 让它“工作”的唯一方法是,如果我离开活动(因此销毁当前的ViewModel)并再次输入。 这次viewModel的LiveData为我提供了之前保持的所有变化,正如预期的那样。 这是代码的其余部分: @Entity public class Shift{ @PrimaryKey private long id; private String […]