我有一个数据库保存在我的应用程序资产文件夹中,并在应用程序首次打开时使用以下代码复制数据库.
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的已知问题还是有些变化?
我的理解LiveData是,它将触发观察者对当前状态变化的数据,而不是一系列历史状态变化的数据.
目前,我有一个MainFragment执行Room写操作的程序,用于将非删除数据更改为已删除的数据.
我也是另一个TrashFragment观察到破坏数据的人.
请考虑以下情形.
MainFragment是当前活动的片段.TrashFragment尚未创建.MainFragment添加了1个已删除的数据.MainFragment用TrashFragment.TrashFragment的观察者将首先收到onChanged0个已删除的数据TrashFragment观察者将接下来接收onChanged1个已删除的数据 我的期望是,第(6)项不应该发生.TrashFragment应该只接收最新的已删除数据,即1.
这是我的代码
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) 我有一个简单的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个问题:
感谢任何建议和意见.谢谢.
android android-room android-livedata android-architecture-components
你可能会想这个问题是一个重复这一个.但从那时起,Android Studio已经更新,并且在那里提供的解决方案不再适用.
我想在android studio中使用图像资源设置我的应用程序徽标.这是因为如果我将我的应用程序徽标直接放在drawable或mipmap中,那么会导致许多问题:如果它的大小很大,则会发生应用程序崩溃,如果在oreo上运行的设备然后徽标将不显示并且默认ic_launcher正在显示等.
在尝试使用图片资源设置我的应用程序徽标时,我遇到了一个问题:我无法保持app徽标的背景透明.
我有一个在photoshop中制作的png徽标,我想将其设置为我的应用徽标,我不想要任何背景,但android studio图像资产不提供任何删除背景的选项.我尝试了以下来自谷歌的解决方案:
但这些都不适合我.
这些都不起作用......请帮助我.任何帮助将不胜感激.
在我的Android应用我有一个运行一个又一个的第一个目的服务是由广播trigerred多意图服务.几天前我遇到了Work Manager,并且非常喜欢Worker和WorkManager类的简单性.工作管理器对常规意图服务的利弊是什么?我现在应该转换到工作经理,考虑到将来我可能不得不写更多的意向服务吗?还有哪个选项可以帮助我轻松测试代码?
java android intentservice android-jetpack android-workmanager
我有一个webapp,当用户点击一个字段时,里面的文字会突出显示供他复制.但是,在Android上,这不会触发复制上下文菜单的打开,因此用户必须自己选择文本.
有没有办法以编程方式触发长按事件,以便复制/粘贴上下文菜单出现在移动浏览器上?
我正在尝试使用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
我正在使用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) 我有一个存储库,用于存放LiveData对象并由两者使用Activity,现在需要JobService(从Firebase调度程序)到ViewModel.
这里有简单的答案Service:从前台服务观察LiveData
但它没有提到如何做同样的事情JobService.
android android-service android-jobscheduler android-livedata android-architecture-components
我将多味道库发布到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 ×10
android-architecture-components ×4
android-room ×1
gradle ×1
ios ×1
java ×1
javascript ×1
jitpack ×1
kotlin ×1
mobile ×1
mvvm ×1
retrofit ×1
sqlite ×1
uiimageasset ×1