Tag: android

如何使用Mockito / PowerMockito来模拟Kotlin的对象?

我有以下class级: object CharacterDAO : GenericDAO(Character::class.java, “id”) { } 我想嘲笑使用Mockito / PowerMockito。 有什么建议么?

JNI GetShortArrayElements失败,SIGSEGV SEGV_ACCERR

我在托管代码中创建了一个缓冲区: var nativeBuffer = ShortArray(bufferSize) 这是Kotlin代码,但是根据stdlib文档 ,这个语法实际上是一个返回short []的包装器。 然后我想使用JNI从C ++写入这个缓冲区: JNIEXPORT void JNICALL Java_package_class_name_readNext (JNIEnv * env, jclass clazz, jshortArray javaArray) { jboolean * isCopy; short * targetArray = env->GetShortArrayElements(javaArray, isCopy); // Do stuff to targetArray } 问题是GetShortArrayElements调用总是导致崩溃,并使用以下逻辑删除: 11-07 21:23:53.610 86-86/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** […]

一个LiveData中有多个对象

我有这个实体: @Entity public class CartItem { @PrimaryKey(autoGenerate = true) private long id; private long itemId; private long serviceId; private String observation; @Ignore private Service service; @Ignore private Item item; } 正如你所看到的,它由其他对象组成,在这种情况下, Service和Item 。 在片段中,我以这种方式实现LiveData: CartItemViewModel model = CartItemViewModel.create(getActivity()); model.getLiveData().observe(this, new Observer<List>() { @Override public void onChanged(@Nullable List cartItems) { } 它正在工作, onChange方法正在按预期调用。 这是我在kotlin中的ViewModel: class CartItemViewModel […]

如何检查天气纯文本是否为空?

我怎样才能检查天气明文文本是否为空? 当用户在明文区域输入自己的体重时,“开”按钮点击事件需要执行validation并在文本区域显示结果, 当我给一些有效的输入代码按预期工作 但是当我不给任何输入的时候,App强制停止 这是代码 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var weight = editText.text //store input from plaintext to variable button.setOnClickListener { //on click event for button.. //textView3.text=weight if ( /* how to check here */ ) // condition here { textView2.text=”Give some inputs plz :-” // } else { var res = […]

有点复杂的消息布局

我有一个非常有趣的问题。 我应该像电报那样对短信进行布局,但只能用文本。 所以如果消息文本占用多于一行的话,我应该稍微移一点时间戳。 我做了2个textView的布局(一个用于单行消息和其他多行,你可以看到我的布局在附加) 我的问题是,当我显示时间戳多行的情况下,所有列表一个小小的跳跃(因为高度的观点改变)在这里我的代码从我的viewHolder(我使用kotlin,但它仍然非常明显)。 主要的问题是 – 如何在渲染之前在textView中计算行数? val date = stamp.toString(Constants.DEFAULT_TIME_FORMAT) textViewItemMessageText.text = text textViewItemMessageTimeForSingleLine.show() textViewItemMessageTime.hide() textViewItemMessageTimeForSingleLine.text = date textViewItemMessageText.post { if (textViewItemMessageText.lineCount > 1) { textViewItemMessageTimeForSingleLine.hide() textViewItemMessageTime.show() textViewItemMessageTime.text = date }

Kotlin Gradle问题

我创建了一个用Kotlin语言编写的项目的Jar。 Jar包含以下文件夹: com jet kotlin meta-inf okio org 然后我创建了一个android项目,并添加Kotlin和Jar作为依赖项。 当我尝试执行hello world app时,会引发以下exception。 com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘/usr/lib/jvm/java-7-openjdk-amd64/bin/java” finished with non-zero exit value 1 我的应用程序构建gradle文件是 apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ android { compileSdkVersion 22 buildToolsVersion “22.0.1” defaultConfig { applicationId “abc.xyz.kotlin” minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false […]

Instrumentation测试将作为Android Studio 3(空测试套件)上的Local Unit测试运行,

我在Android Studio 3.0.1和Kotlin中运行Instrumentation Tests时遇到了一些问题(我之前的Android Studios和Java没有这样的问题)。 我在androidTest包中创建了这个(非常简单的)类[ 引用 ],如下所示: @RunWith(AndroidJUnit4::class) @LargeTest class DiscoverActivityTest { @JvmField @Rule val mDiscoverActivityTestRule = ActivityTestRule(DiscoverActivity::class.java) @Test fun onViewLoadedShowDiscoverFragment() { onView(withId(R.id.discoverFragmentView)).check(matches(isDisplayed())) } } 当我尝试运行测试时,有两个问题。 首先,它希望在控制台中运行测试,而无需打开模拟器或将apk包部署到设备(因为这只是一个正常的本地unit testing)。 另外,我也得到这个错误信息: 未find类:“com.site.application.discover.DiscoverActivityTest”空的测试套件。 我想在“ Edit Configuration选项(比如这个解决方案的例子)中强制使用检测工具,但是在新的Android Studio 3.0.1中没有这样的选项(比如2.3版本) 更新: 这里是我的gradle文件内容: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ android { compileSdkVersion 27 defaultConfig { applicationId “com.site.application” […]

Gradle上的Android应用程序:无法合并dex

我在Android Studio中遇到了一个错误: Execution failed for task ‘:app:transformDexArchiveWithExternalLibsDexMergerForDebug’. > com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 我使用Gradle和Kotlin。 Android Studio 3.0.1. Windows 10 Pro 64. 我有研究这个主题,所以我尝试了一些解决方案,从这里 : 清理和重建项目。 没有变化。 将gradle中的“编译”更改为“实现”。 没有变化。 删除.gradle和build目录。 没有变化。 在gradle的defaultConfig中添加multiDexEnabled true 。 在这种情况下,我有另一个错误: Execution failed for task ‘:app:transformClassesWithMultidexlistForDebug’. > java.io.IOException: Can’t write [G:\work\myapp\app\build\intermediates\multi-dex\debug\componentClasses.jar] (Can’t read [C:\Users\Public\.gradle\caches\transforms-1\files-1.1\support-core-utils-27.0.2.aar\e1c9881d763269b67bf59dc03d19c305\jars\classes.jar(;;;;;;**.class)] (Duplicate zip entry [classes.jar:android/support/v4/content/PermissionChecker$PermissionResult.class])) 我的build.gradle : apply plugin: ‘com.android.application’ […]

当重新创建Activity时,lateinit属性不会被初始化

在我的活动我有一个lateinit属性称为controller ,我的片段使用。 该属性在Activity.onCreate()初始化。 我的Fragment通过onAttach()获取其参考。 然后Fragment在Fragment.onCreate()调用myActivity.controller 。 通常controller首先在Activity.onCreate()初始化,然后添加Fragment 。 所以这工作得很好。 但是,当我的Activity被杀害,它试图重新创建自己和它的碎片。 这导致在Activity.onCreate()初始化之前调用Fragment.onCreate() Activity.onCreate() 。 这些是我现在看到的选项: 在super.onCreate()之前初始化controller (如果甚至可能的话) 将调用移动到myActivity.controller到更高的生命周期回调,如onViewCreated() 在Kotlin 1.2中有::controller.isInitialized 这里我最好的选择是什么?

genericstypes和多态性

我有BaseFragment : public abstract class BaseFragment extends Fragment implements BaseMvpView { private BasePresenter presenter; protected void syncLifeCycle(BasePresenter presenter) { this.presenter = presenter; this.presenter.onCreate(); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //noinspection unchecked presenter.onAttachView(this); //it works with a warning } @Override public void onResume() { super.onResume(); presenter.onResume(); } @Override public void […]