Tag: 安卓

Kotlin类NoClassDefFoundError崩溃

我有一个现有的Android项目,使用以下库: AutoValue Dagger2 RxJava Retrolambda 我正在尝试添加Kotlin支持,以便我可以将项目慢慢迁移到Kotlin。 这是我所做的。 增加了Kotlin依赖。 将其中一个类转换为Kt类并移至src/main/kotlin/..package.. 源集中添加了kotlin。 sourceSets {main.java.srcDirs + =’src / main / kotlin’} 当我做一个干净的生成和部署应用程序,我得到NoClassDefFoundErrorexception。 但是,如果我再次部署它工作得很好。 有什么建议么? 我在课堂上没有任何注释,所以我没有申请kapt插件。 注意:我正在使用最新的kotlin 1.0.4。 我也有即时运行禁用。

将kotlin转换为java后,Notnullvariables可以为空

当我有一个这样的kotlin类时,假设uniqueName是NotNull。 data class Payload( @SerializedName(“unique_name”) val uniqueName: String, @SerializedName(“nbf”) val nbf: Int, @SerializedName(“exp”) val exp: Int, @SerializedName(“iat”) val iat: Int ) 但是当我测试这个代码 @Test fun fromStringJsonToObject4() { val gsonHelper = GsonHelper() val payloadJsonString = “{}” val payload = Payload(“”, 0, 0, 0) assertEquals(gsonHelper.fromStringJsonToObject(payloadJsonString, Payload::class.java), payload) } 它返回 Expected :Payload(uniqueName=null, nbf=0, exp=0, iat=0) Actual :Payload(uniqueName=, nbf=0, exp=0, […]

如何迭代SparseArray?

有没有一种方法来迭代Java SparseArray(Android版)? 我用sparsearray很容易通过索引获取值。 我找不到一个。

SyncAdapter中的Singleton Room数据库触发LiveData

我努力在我的SyncAdapter使用Room作为单例。 我使用Kotlin。 我的房间课 @Database(entities = [(Product::class)], version = 1, exportSchema = false) abstract class AppDatabase : RoomDatabase() { abstract fun productDao(): ProductDao companion object { @Volatile private var INSTANCE: AppDatabase? = null fun getInstance(context: Context) : AppDatabase = INSTANCE ?: synchronized(this) { INSTANCE ?: buildDatabase(context.applicationContext) .also {INSTANCE = it} } private fun buildDatabase(context: Context) = […]

匕首2将活动视图模型注入片段

(使用kotlin)我有一个应用程序使用2个片段的设置活动。 我希望两者都能像Activity一样获得SettingsViewModel的同一个实例。 我认为有一个范围问题,我错过了。 首先,我有标准的ViewModelModule : @Module abstract class ViewModelModule { @Binds @IntoMap @ViewModelKey(SettingsViewModel::class) abstract fun bindSettingsViewModel(viewModel: SettingsViewModel): ViewModel @Binds abstract fun bindViewModelFactory(factory: MyViewModelFactory): ViewModelProvider.Factory } 我把我的活动绑定在: @Module abstract class AndroidBindingModule { @PerActivity @ContributesAndroidInjector(modules = [SettingsActivityModule::class]) abstract fun contributeSettingsActivity(): SettingsActivity } 随着所有其他的东西,这工作得很好, SettingsActivity也得到了一个SettingsActivity的实例。 SettingsActivityModule添加以下内容: @PerFragment @ContributesAndroidInjector abstract fun contributeMainSettingsFragment(): MainSettingsFragment @PerFragment @ContributesAndroidInjector abstract fun contributeDebugSettingsFragment(): DebugSettingsFragment […]

为什么我的RxJava设置阻止我的UI线程? 使用BluetoothAdapter.startLeScan回调

我正在努力寻找阻止我的UI线程的具体行动,我已经尝试了几个调度运算符,但我不知道如何使其工作。 我有一个用户界面的按钮,这onClicked是开始蓝牙扫描和更新textView字符串像一个日志(它显示了在这一刻发生的事情)。 所以这是我的MainActivity: lateinit var disposable: Disposable val textDataService = TextDataService() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_scan_test) buttonScanTestStart.setOnClickListener { if (isBluetoothEnabled()) { textViewLog.text = “” buttonScanTestStop.visibility = View.VISIBLE buttonExportScanTestRaportSummary.visibility = View.GONE buttonExportScanTestRaportFull.visibility = View.GONE buttonScanTestStart.visibility = View.GONE disposable= Scanner() .discoverSingleDevice(this, ” “, textViewLog) .doOnError { setText(“General error: ${it.message ?: it::class.java}”, textViewLog) setLogText(“General error: ${it.message […]

Kotlin对象加载延迟

我有一个奇怪的问题,我有一个Android的初始登录活动,而它的onCreateMethod,被触发,我被Object类调用,这是一个名为BaseData的静态对象。 我得到一个奇怪的空错误,而它的一个对象。 发现对象在Kotlin中被延迟加载需要一段时间,我如何强制它首先加载,并在我的主登陆登录活动创建时可用。 class LoginActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { if(BaseData.userId == “”) { //At this step BaseData itself comes as null, so app goes blank //Do something } } } object BaseData : Observable() { var initialSyncDone:Boolean = false var isOffline:Boolean = true var userId: String = “” init{ // I […]

在FacebookLogin中使用kotlin时,“未解决的参考”背后的原因是什么?

当我试图执行附图中的代码时,我总是收到“未解析的引用:FacebookCallback”错误。 我正在尝试按照以下链接指示设置Facebook登录: https : //developers.facebook.com/docs/facebook-login/android#addbutton 我是Kotlin的新手,但我看不出我在这里做错了什么。 编辑: 这是我的gradle文件: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘com.neenbedankt.android-apt’ android { compileSdkVersion 24 buildToolsVersion “24.0.0” defaultConfig { applicationId “yetti.yetti” minSdkVersion 23 targetSdkVersion 24 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } sourceSets { main.java.srcDirs += ‘src/main/kotlin’ androidTest.java.srcDirs […]

Kotlin – 如何做onCompleteListener从Firestore获取数据?

我有一个问题从Firestore中获取数据,在JavaCode中我们可以这样做: DocumentReference docRef = db.collection(“cities”).document(“SF”); docRef.get().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document != null) { Log.d(TAG, “DocumentSnapshot data: ” + task.getResult().getData()); } else { Log.d(TAG, “No such document”); } } else { Log.d(TAG, “get failed with “, task.getException()); } } }); 但在Kotlin,当我尝试覆盖onComplete函数,它是不可用的。 那么,我怎样才能得到“任务”呢?

在BottomsheetDialog中使用setcontentview时,会出现类似“以下函数都不能用提供的参数调用”的错误

我试图在我的片段中实现BottomsheetDialog。 但是当我尝试调用bottomSheetDialog.setContentView(view)的错误 以下任何函数都不能用在android.support.design.widget.BottomSheetDialog中定义的android.support.design.widget.BottomSheetDialog中定义的setContentView(View!)参数来调用setContentView(Int) 当我用Java代码实现它时,它完美的工作。 但是当试图用Kotlin实现这个错误时, 提供我用Kotlin试过的代码, private fun showRenewDialog(renewModel: RenewModel?) { if (bottomSheetDialog == null) bottomSheetDialog = BottomSheetDialog(activity) val view:View? = activity.getLayoutInflater().inflate(R.layout.renewal_dialog, null, false) bottomSheetDialog.setContentView(view) } 与Java相同的代码 if (bottomSheetDialog == null) bottomSheetDialog = new BottomSheetDialog(getActivity()); View view = getActivity().getLayoutInflater().inflate(R.layout.book_dialog, null, false); bottomSheetDialog.setContentView(view);