小编Sag*_*gar的帖子

Android P - 从资产复制数据库后'SQLite:没有这样的表错误'

我有一个数据库保存在我的应用程序资产文件夹中,并在应用程序首次打开时使用以下代码复制数据库.

inputStream = mContext.getAssets().open(Utils.getDatabaseName());

        if(inputStream != null) {

            int mFileLength = inputStream.available();

            String filePath = mContext.getDatabasePath(Utils.getDatabaseName()).getAbsolutePath();

            // Save the downloaded file
            output = new FileOutputStream(filePath);

            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = inputStream.read(data)) != -1) {
                total += count;
                if(mFileLength != -1) {
                    // Publish the progress
                    publishProgress((int) (total * 100 / mFileLength));
                }
                output.write(data, 0, count);
            }
            return true;
        }
Run Code Online (Sandbox Code Playgroud)

上面的代码运行没有问题,但是当你尝试查询数据库时,你会得到一个SQLite:没有这样的表异常.

此问题仅发生在Android P中,所有早期版本的Android都能正常工作.

这是Android P的已知问题还是有些变化?

sqlite android android-9.0-pie

44
推荐指数
4
解决办法
1万
查看次数

为什么要为新连接的观察者触发两次LiveData观察者

我的理解LiveData是,它将触发观察者对当前状态变化的数据,而不是一系列历史状态变化的数据.

目前,我有一个MainFragment执行Room写操作的程序,用于将非删除数据更改为已删除的数据.

我也是另一个TrashFragment观察到破坏数据的人.

请考虑以下情形.

  1. 目前有0个已删除的数据.
  2. MainFragment是当前活动的片段.TrashFragment尚未创建.
  3. MainFragment添加了1个已删除的数据.
  4. 现在,有1个已删除的数据
  5. 我们采用抽屉式导航来代替MainFragmentTrashFragment.
  6. TrashFragment的观察者将首先收到onChanged0个已删除的数据
  7. 再次,TrashFragment观察者将接下来接收onChanged1个已删除的数据

我的期望是,第(6)项不应该发生.TrashFragment应该只接收最新的已删除数据,即1.

这是我的代码


TrashFragment.java

public class TrashFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        noteViewModel = ViewModelProviders.of(getActivity()).get(NoteViewModel.class);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-architecture-components

41
推荐指数
9
解决办法
3万
查看次数

Android Room:更新插入的LiveData回调?

我有一个简单的DAO,包括CRUD功能

FeedEntryDAO.java

@Dao
public interface FeedEntryDAO {

  @Query("SELECT * FROM feedEntrys")
  LiveData<List<FeedEntry>> getAll();

  @Query("SELECT * FROM feedEntrys WHERE uid = :uid LIMIT 1")
  LiveData<FeedEntry> findByUid(int uid);

  @Insert
  void insertAll(FeedEntry... feedEntries);

  @Delete
  void delete(FeedEntry feedEntry);

  @Update
  int update(FeedEntry feedEntry);

}
Run Code Online (Sandbox Code Playgroud)

对于select,可以返回LiveData类型.

在Activity中,代码非常适合选择

viewModel.getFeedEntrys().observe(this,entries -> {...});
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试插入,更新,删除数据时.代码看起来有点难看,每次都会创建一个asynctask.

new AsyncTask<FeedEntry, Void, Void>() {
                @Override
                protected Void doInBackground(FeedEntry... feedEntries) {
                  viewModel.update(feedEntries[0]);
                  return null;
                }
}.execute(feedEntry);
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

  1. 我可以使用LiveData来包装删除,插入,更新功能吗?
  2. 更好的方法是为删除,插入,更新维护这样的asynctask类?

感谢任何建议和意见.谢谢.

android android-room android-livedata android-architecture-components

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

Android Studio图像资产启动器图标透明背景颜色

你可能会想这个问题是一个重复一个.但从那时起,Android Studio已经更新,并且在那里提供的解决方案不再适用.

我想在android studio中使用图像资源设置我的应用程序徽标.这是因为如果我将我的应用程序徽标直接放在drawable或mipmap中,那么会导致许多问题:如果它的大小很大,则会发生应用程序崩溃,如果在oreo上运行的设备然后徽标将不显示并且默认ic_launcher正在显示等.

在尝试使用图片资源设置我的应用程序徽标时,我遇到了一个问题:我无法保持app徽标的背景透明.

我有一个在photoshop中制作的png徽标,我想将其设置为我的应用徽标,我不想要任何背景,但android studio图像资产不提供任何删除背景的选项.我尝试了以下来自谷歌的解决方案:

这个这个

但这些都不适合我.

尝试的解决方案:

  1. 通过将形状设置为无
  2. 通过从它的默认位置删除ic_launcher_background文件
  3. 试过不同的设备

这些都不起作用......请帮助我.任何帮助将不胜感激.

android uiimageasset android-studio-3.1

19
推荐指数
3
解决办法
3万
查看次数

Android Work Manager与服务?

在我的Android应用我有一个运行一个又一个的第一个目的服务是由广播trigerred多意图服务.几天前我遇到了Work Manager,并且非常喜欢Worker和WorkManager类的简单性.工作管理器对常规意图服务的利弊是什么?我现在应该转换到工作经理,考虑到将来我可能不得不写更多的意向服务吗?还有哪个选项可以帮助我轻松测试代码?

java android intentservice android-jetpack android-workmanager

18
推荐指数
1
解决办法
7890
查看次数

在Javascript中模拟长按

我有一个webapp,当用户点击一个字段时,里面的文字会突出显示供他复制.但是,在Android上,这不会触发复制上下文菜单的打开,因此用户必须自己选择文本.

有没有办法以编程方式触发长按事件,以便复制/粘贴上下文菜单出现在移动浏览器上?

javascript mobile android ios

17
推荐指数
2
解决办法
1651
查看次数

LiveData.无法分配给'value':setter受保护/*受保护,package*/用于合成扩展

我正在尝试使用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

15
推荐指数
1
解决办法
4402
查看次数

android livedata进行顺序调用

我正在使用Retrofit,实时数据.我的项目有一种情况,我必须进行网络调用.如果任何一个失败,它应该返回错误.

目前我有两个实时数据观察员来完成工作,这不是一个好方法,所以我想知道更好的方法或示例代码来处理这样的要求.

注意:我没有使用Rxjava.

查看代码基本逻辑

    String id = "items/1233"; //ID which has to to be deleted
    if (isCustomizedItem) {
        viewModel.deleteEvent(id);
    } else {
        viewModel.createCustomItems();
        viewModel.deleteEvent(id);
    }
Run Code Online (Sandbox Code Playgroud)

Livedata观察员

    viewModel.getItemDeleted().observe(this, serverResponse -> {
        if (serverResponse.status == Status.SUCCESS) {
            Timber.i("Successfully deleted");
        }
    });

    viewModel.itemCreated().observe(this, serverResponse -> {
        if (serverResponse.status == Status.SUCCESS) {
            Timber.i("new items added");
            //Again call delete for specific item
            viewModel.deleteEvent(id);
        }
    });
Run Code Online (Sandbox Code Playgroud)

Viewmodel代码

    createItems = Transformations.switchMap(eventData, (data) -> {
        if (canCreateItems(data)) {
            return AbsentLiveData.create();
        } else {
            return eventItemRepository.createItems();
        }
    });

    deleteItem …
Run Code Online (Sandbox Code Playgroud)

android mvvm retrofit android-livedata

10
推荐指数
1
解决办法
1412
查看次数

从JobService观察LiveData

我有一个存储库,用于存放LiveData对象并由两者使用Activity,现在需要JobService(从Firebase调度程序)到ViewModel.

这里有简单的答案Service:从前台服务观察LiveData

但它没有提到如何做同样的事情JobService.

android android-service android-jobscheduler android-livedata android-architecture-components

9
推荐指数
1
解决办法
1540
查看次数

无法在jitpack上发布

我将多味道发布到jitpack 有问题.日志表示构建成功但状态是错误

在此输入图像描述

我已经按照jitpack网站上的说明进行了操作,但是他们的示例使用了旧的gradle版本,并且它不适用于gradle 4.4

这是日志:

Build starting...
Start: Fri Apr 20 07:35:56 UTC 2018
Git:
1.28.1-1-g932f4d8
commit 932f4d88e13b1c8c52b4dbae8c203e7d52a0eadf
Author: yzheka 
Date:   Fri Apr 20 10:34:49 2018 +0300

    jitpack config


Run gradle build
Gradle build script
Found gradle version: 4.4.
Using gradle wrapper
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Djavax.xml.accessExternalSchema=all
Downloading https://services.gradle.org/distributions/gradle-4.4-all.zip
..............................................................................................
Unzipping /home/jitpack/.gradle/wrapper/dists/gradle-4.4-all/9br9xq1tocpiv8o6njlyu5op1/gradle-4.4-all.zip to /home/jitpack/.gradle/wrapper/dists/gradle-4.4-all/9br9xq1tocpiv8o6njlyu5op1
Set executable permissions for: /home/jitpack/.gradle/wrapper/dists/gradle-4.4-all/9br9xq1tocpiv8o6njlyu5op1/gradle-4.4/bin/gradle

------------------------------------------------------------
Gradle 4.4
------------------------------------------------------------

Build time:   2017-12-06 09:05:06 UTC
Revision:     cf7821a6f79f8e2a598df21780e3ff7ce8db2b82

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled …
Run Code Online (Sandbox Code Playgroud)

android gradle jitpack

9
推荐指数
1
解决办法
599
查看次数