我正在尝试使用 Android ViewModel 添加 Room 数据库。我按照此链接进行了相同的https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#13
我遇到了一个例外:
导致:java.lang.RuntimeException:无法创建类 com.example.dailyfaithapp.ViewModels.FavouritesViewModel 的实例
我检查了一些问题和答案,但没有一个对我有用。
这是我的视图模型
public class FavouritesViewModel extends ViewModel {
public FavouriteRepository mRepository;
public LiveData<List<Favourites>> mAllFavourites;
public FavouritesViewModel (Application application) {
mRepository = new FavouriteRepository(application);
mAllFavourites = mRepository.getmAllFavourites();
}
public LiveData<List<Favourites>> getmAllFavourites() { return mAllFavourites; }
public void insert(Favourites favourites) { mRepository.insertFavourite(favourites); }
}
Run Code Online (Sandbox Code Playgroud)
我还尝试使用视图模型工厂调用视图模型,但在这里不起作用
public class FavouritesViewModelFactory implements ViewModelProvider.Factory {
private Application mApplication;
private String mParam;
public FavouritesViewModelFactory(Application application) {
mApplication = application;
}
@Override
public <T extends ViewModel> T …Run Code Online (Sandbox Code Playgroud) 我创建了一个水平寻呼机,并且尝试了多种方法,但无法消除最后一项之后的额外空间。第一项之前的间距是正确的,但最后一项之后的间距很多。
我希望最后一个空间也像第一个一样统一。
HorizontalPager(
verticalAlignment = Alignment.Top,
count = 3,
state = pagerState,
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.constrainAs(pager) {
start.linkTo(parent.start)
end.linkTo(parent.end)
top.linkTo(beneTitle.bottom)
},
contentPadding = PaddingValues(end = 80.dp),
itemSpacing = 16.dp
) { page -\>
val currentItem = additionalBenefitItem.listItems\[page\]
Box(modifier = Modifier.width(260.dp)) {
Card(
modifier = Modifier.clickable {
viewModel.updateSelectedBenefitCardIndex(page)
onCardClick()
}.padding(top = 20.dp),
elevation = 2.dp,
shape = RoundedCornerShape(corner = CornerSize(16.dp)),
backgroundColor = Color(
android.graphics.Color.parseColor(
currentItem.backgroundColor
)
)
) {
ConstraintLayout(
modifier = Modifier.fillMaxWidth(),
) {
val (
title, description, …Run Code Online (Sandbox Code Playgroud) android padding horizontal-scrolling android-jetpack-compose jetpack-compose-accompanist
我使用以下代码从库中获取文件.我检索的文件是图像文件,视频文件或基于用户选择的音频文件.
现在我在列表视图中显示从库中检索的文件.但我无法区分用户选择的文件是图像文件(即.jpg/.png)或其视频文件或音频文件.
通过获取扩展并在if else条件中检查它可能我知道.但我想知道它有可能做到这一点
用于从Gallery获取图像的代码是
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(intent, GET_VIDEO_AUDIO);
fileTransferDialog.dismiss();
Run Code Online (Sandbox Code Playgroud) 我if/else在我的代码中写了一个简单的工作.后来我if在第一个下面添加了另一个级别,并且被它的行为困惑了.这是重新创建情境的非常简单的代码:
public static void main(String[] args) {
boolean a = true;
boolean b = false;
if (a)
if (b)
System.out.println("a=true, b=true");
else
System.out.println("a=false");
}
Run Code Online (Sandbox Code Playgroud)
它返回" a=false",即使a是真的!
事实证明它else与最近的绑定if,虽然我没有发现它记录在任何地方,并且eclipse不会将不匹配的缩进级别突出显示为错误(尽管它在格式化文件时确实纠正了它).
使用大括号的一个非常非常强大的论据!
else/if记录的绑定顺序在哪里?
作为挑战,
是否有一种方法可以使上面的代码执行缩进使您期望的内容而不添加大括号?
我正在使用Jackson JSON解析器。我有应该通过REST服务返回的简单数据传输对象。
public class PersonDto {
private String name;
private Integer age; // int?
public PersonDto(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public Integer getAge() {
return this.age;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我应该更喜欢包装类而不是原始类型作为字段吗?除了包装器可以为空之外,哪些方法具有更多优势?
我想完全断开我的应用与 Firebase 的连接。这个问题已经被问过好几次了(例如这里)。大多数答案都侧重于在 Firebase 控制台内而不是在 Android studio内断开应用与 Firebase 的连接。
将我的应用与 Firebase 控制台断开连接后。每次我尝试将应用重新连接到另一个 Firebase 项目时,都会弹出一个错误提示框,指出该应用已经是 Firebase 项目的一部分。我知道发生这种情况是因为旧 Firebase 项目中的某些文件仍然存在。我该如何摆脱它们?
我有一个 inputType 为number的 EditText 。当用户打字时,我想用逗号分隔数字。这是一个小例子:
123 将表示为 123
1234 将表示为 1,234
12345 将表示为 12,345
...等等。
我尝试使用 TextWatcher 添加逗号,如下所示:
EditText edittext = findViewById(R.id.cashGiven);
edittext.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
editText.setText(separateWithComma(editText.getText().toString().trim()));
}
});
Run Code Online (Sandbox Code Playgroud)
将方法粘贴separateWithComma()到此处会使这个问题变得格外冗长,但是它确实有效:我在 Eclipse 上测试了它。我认为 addTextChangedListener 不能以这种方式工作,因为当我这样做时,我的应用程序冻结(然后崩溃)。
有更好的方法来实现这一目标吗?感谢您期待积极的回应。
我在左上角有一个带有导航菜单的片段。在活动开始时,我想逐渐从菜单图标中滑出一个视图(我们称之为black_view)。
以下是我希望动画与下图一致的粗略细分:
我试过的:
我尝试通过使用TranslateAnimation来实现这一点。但是,black_view的整个长度出现在动画开始时,这不是我想要的。我还看到一对夫妇的滑动动画代码片段像这个和这个,但他们都遵循TranlateAnimation模型(与整个长度black_view显示瞬间)。
我怎样才能做到这一点?
PS:如果有任何我没有添加的重要细节,请告诉我。
我有一个数组${sorted[@]}。如何计算数组元素出现的频率。
例如:
数组值:
bob
jane
bob
peter
Run Code Online (Sandbox Code Playgroud)
结果:
bob 2
jane 1
peter 1
Run Code Online (Sandbox Code Playgroud) 我正在使用 Exoplayer 在播放列表中播放视频。我想在当前视频结束时自动播放下一个视频。为此,我EventListener在播放器中添加了一个。这是一个片段:
private val videoPlayerListener = object: Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
when(playbackState) {
Player.STATE_IDLE -> showLoadingView()
Player.STATE_READY -> hideLoadingView()
Player.STATE_BUFFERING -> showVideoProgressWheel()
Player.STATE_ENDED -> {
Log.d(TAG, "fired")
playNextVideo()
}
}
}
override fun onPlayerError(error: ExoPlaybackException?) {
// handle error event
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是我的日志显示Player.STATE_ENDED触发了两次。连锁效应是我的播放列表从
视频 1 -> 视频 3 -> 视频 5 -> 视频 7...
代替
视频 1 -> 视频 2 -> 视频 3 -> 视频 4...
我做了一些研究,我在 Github 上发现了这个问题 …
android ×7
java ×4
android-mvvm ×1
arrays ×1
bash ×1
exoplayer2.x ×1
file ×1
firebase ×1
if-statement ×1
jackson ×1
jetpack-compose-accompanist ×1
json ×1
kotlin ×1
object ×1
padding ×1
video-player ×1