小编Yas*_*Ali的帖子

Android Studio无法通过提供错误"文件锁定"打开

成功运行一次后,Android Studio无法打开.错误是:

C:\ Program Files(x86)\ Android\android-studio\system\caches中的文件被锁定.Android Studio将无法启动.

有没有人找到它的解决方案?

android-studio

63
推荐指数
2
解决办法
2万
查看次数

使用Android Studio进行重构时排除注释和字符串

重命名方法重新分解不仅重命名变量,而且包括注释的任何地方(它不能确定注释中的字符串是否真的是变量名).

例如:

class ABC{
   private String username;

   private void X(){
    String str = "username";
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,在重命名类成员后username,Android Studio将表现得像:

class ABC{
   private String mUsername;

   private void X(){
    String str = "mUsername"; // it should be remain same as String str = "username";
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法更改Android Studio中的重新分解设置?

android-studio

21
推荐指数
1
解决办法
5372
查看次数

如何取消正在运行的 LiveData 协程块

通过使用 LiveData 的最新版本“androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha03”,我使用 LiveData 的新构建块(LiveData + Coroutine)为 ViewModel 中名为“搜索产品”的功能开发了代码使用 Retrofit 执行同步网络调用并相应地更新 ViewModel 中的不同标志(isLoading、isError)。我在“查询”LiveData 上使用 Transforamtions.switchMap,因此只要 UI 中的“查询”发生更改,“搜索产品”代码就会使用 Transformations.switchMap 开始执行。一切正常,除了我想在“查询”LiveData 发生更改时取消之前的改造调用。目前我看不到任何方法来做到这一点。任何帮助,将不胜感激。

class ProductSearchViewModel : ViewModel() {
    val completableJob = Job()
    private val coroutineScope = CoroutineScope(Dispatchers.IO + completableJob)

    // Query Observable Field
    val query: MutableLiveData<String> = MutableLiveData()

    // IsLoading Observable Field
    private val _isLoading = MutableLiveData<Boolean>()
    val isLoading: LiveData<Boolean> = _isLoading


    val products: LiveData<List<ProductModel>> = query.switchMap { q ->
        liveData(context = coroutineScope.coroutineContext) {
            emit(emptyList())
            _isLoading.postValue(true)
            val service = MyApplication.getRetrofitService()
            val response = …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-extension android-livedata kotlin-coroutines

5
推荐指数
1
解决办法
2811
查看次数

Kotlin:如何使用嵌套列表映射列表

我想将网络 DTO(其余 api 响应)转换为 Kotlin 中的数据库 DTO。网络 DTO 包含一个列表作为字段,该列表中的项目还包含其他数据的列表。下面是网络响应或网络DTO的表示

{
   categories: [
      {
         catId: 0,
         name: "Category A",
         products: [
             {
                 prodId: 900,
                 name: "Product 1"
                 ingredients: [
                     {
                         name: "Ingre 1"
                     }
                 ]
             }
         ]
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

我想提取并转换所有类别的列表,然后将所有产品的列表,然后将所有成分的列表转换为三个单独的列表,并且还想将这些数据转换为各自的数据库 DTO。

我已经创建了一段代码来执行所需的任务,但我确信存在性能问题,并且必须有一些更 kotlinish 的解决方案。

val dbCategories = networkCategories?.map {
                    DBCategory(
                            catId = it.catId,
                            name = it.name
                    )
                }

val dbProducts = networkCategories?.map { it.networkProducts }?.map {
                it.map { singleNetworkProduct ->
                    DBProduct(
                            prodId = singleNetworkProduct.prodId,
                            name = singleNetworkProduct.name,
                    )
                }
            }?.flatten() …
Run Code Online (Sandbox Code Playgroud)

performance android datamapper kotlin

3
推荐指数
1
解决办法
5426
查看次数