タグ付けされた質問 「kotlin」

Kotlinは、JetBrainsに支えられた、静的に型付けされたオープンソースのプログラミング言語です。KotlinはOOPと機能の機能を組み合わせ、相互運用性、安全性、明確性、およびツールのサポートに重点を置いています。現在、JVMとJavaScriptを対象としており、Androidで公式にサポートされている言語です。

3
ViewBindingとKotlin Android Extensionsの合成ビュー
新しいViewBindingは、Kotlin Android Extensionsと合成ビューバインディングをどのように比較しますか? 新しいViewBindingsによって提供されるNullSafetyとTypeSafetyを別にして、ビューで合成バインディングを使用するKotlinの方法を廃止することを検討する必要があるのはなぜですか。 新しいViewBindingは、事前にBindingクラスを生成するため、パフォーマンスが向上していますか?

2
「不適切なブロッキングメソッドの呼び出し」を適切にする方法
私は現在、コトリンコルーチンをさらに活用しようとしています。しかし、私は問題に直面します。これらのコルーチン内でmoshiまたはokhttpを使用すると、警告が表示されます。 「不適切なブロッキングメソッドの呼び出し」 これらを修正する最良の方法は何ですか?私は本当に不適切になりたくありません;-)

3
Kotlin FlowとAndroid LiveData
Kotlin Flowについて質問があります 複数のフラグメントからのLiveDataを観察できます。これをFlowで実行できますか?はいの場合はどうですか? map&を使用して、1つのLiveDataから複数のLiveDataを取得できますswitchMap。単一のソースフローから複数のフローを作成する方法はありますか? 使用してMutableLiveData、私は、変数の参照を使用してどこからでもデータを更新することができます。Flowで同じことをする方法はありますか? 私は次のようなユースケースを持っています。単一のソースフローを提供するSharedPreferences使用法callbackFlow{...}を観察します。そのフローから、キーと値のペアごとに複数のフローを作成します。 これらはばかげた質問に聞こえるかもしれません。RxとFlowの世界は初めてです。


2
safe-argsプラグインを有効にした後、データバインディングからルートビューを取得できません
dataBindingを使用してAndroidアプリで作業していて、現在safe-argsプラグインを追加しようとしていますが、プラグインを有効にした後、binding.rootを介してルートビューを取得できなくなりました-Android Studioでエラーが発生します: Unresolved Reference None of the following candidates is applicable because of a receiver type mismatch: * internal val File.root: File defined in kotlin.io どのようにすれば、データバインディングとsafe-argsを組み合わせてうまく機能させることができますか? コードスニペットがKotlinにある間、私はJavaの回答を喜んで受け取ります。Javaほど快適ではありませんが、簡単に読んで翻訳できます。 エラーメッセージと「安全な引数」をグーグル検索しても、同じ問題を抱えている人を見つけることができませんでした。最初に、こちらのAndroidドキュメントに記載されているクラスパスを試してみました:https : //developer.android.com/guide/navigation/navigation-pass-data classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0" そして、私が使用することを提案するチュートリアルも見つけました: classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha07" 両方に同じ問題がありました:binding.rootはプラグインがアクティブ化されているときにエラーを出しました これが私のフラグメントのonCreateView()です。その戻り行は、safe-argsが有効になっていない場合は正しく機能し、有効になっている場合は機能しません。 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding …

1
Navigation Arch Componentは誤検知のメモリリークを引き起こす可能性がありますか?
メモリリークとその原因についての基本的な知識があります。そのため、コードに問題があるのか​​、それとも誤検知なのかわかりません。プロジェクトは小さくないので、コードのどの部分を共有するべきかわかりません。ただし、コメント欄でお知らせください。必要なコードを追加します。 ナビゲーションアーチコンポーネントを使用し、MVVMパターンに従います。プロジェクトの開発の後半でLeakCanaryライブラリを追加したところ、画面間を移動すると、保持されたインスタンスに関する警告がすぐに表示され始めました。 この問題は、バックスタックにフラグメントを追加すると発生します。バックスタックにフラグメントを追加するたびに、保持されるインスタンスのカウンターが増加します。LeakCanaryがしきい値の5に達すると、ヒープがダンプされ、レポートが提供されます。 しかし、[戻る]ボタンをクリックして前の画面に戻ると、保持されているインスタンスのカウンターが減少し、最終的に1番目の画面に戻ると、保持されているすべてのインスタンスが消えます。 ヒープ分析レポートを見るとCoordinatorLayout、XML内の参照である変数coordinatorLayout がリークしていることがわかります。変数とそのすべての使用法を削除してアプリを再度実行すると、同じ問題が発生しますが、別の変数がxml内の別のビューへの参照になっています。LeakCanaryがリークしていると報告したすべてのビューとその使用法を削除しようとしました。TextViewテキストを設定するためだけに使用され、onViewCreated他の場所では使用されていないがリークしていると言われたとき、コードに問題があることに疑問を感じ始めました。 ライフサイクルメソッドの呼び出しをフラグメントで分析しましたが、前のフラグメントの新しい画面に移動するonDestroyViewと、呼び出されるまでのすべてのメソッドが呼び出されますが、呼び出されませんでしたonDestroy。[戻る]をクリックするとonDestroy、バックスタックの上にあるフラグメントが呼び出され、保持されているインスタンスのカウンターが減少します。 ナビゲーションコンポーネントがフラグメントがバックスタックにあるときにフラグメントのインスタンスを保持しており、LeakCanaryがそれをリークとして認識していると思います。

2
再帰的なメソッド呼び出しにより、kotlinでStackOverFlowErrorが発生するが、Javaでは発生しない
私はJavaとKotlinに2つのほとんど同じコードがあります Java: public void reverseString(char[] s) { helper(s, 0, s.length - 1); } public void helper(char[] s, int left, int right) { if (left >= right) return; char tmp = s[left]; s[left++] = s[right]; s[right--] = tmp; helper(s, left, right); } コトリン: fun reverseString(s: CharArray): Unit { helper(0, s.lastIndex, s) …
14 java  recursion  kotlin 

1
Android Q:スコープストレージ内のSQLiteデータベース
Android Qでは、新しいスコープストレージ機能が導入されました。 Android 10(APIレベル29)以上を対象とするアプリには、デフォルトで外部ストレージまたはスコープストレージへのスコープアクセスが付与されます。このようなアプリは、外部ストレージ上のアプリ固有のディレクトリだけでなく、アプリが作成した特定のタイプのメディアにもアクセスできます。 外部ストレージにSQLiteデータベースを作成するアプリがあります。これは、アプリをアンインストールしたときにデータベースがまだ有効であり、後でリカバリとして使用したり、Androidデバイスの外部で使用したりできるようにするためです(PCで言う) Android Qで同じ効果を得るにはどうすればよいですか?より正確には、データベースが外部のパブリックディレクトリに格納されている場合-標準を使用してこのデータベースを読み取るにはどうすればよいSQLiteOpenHelperですか?

1
Javaアノテーション宣言でKotlin定数を参照するにはどうすればよいですか?
Kotlinのこのビットを考えると: object OldTownRoad { const val COWBOY_HATS = "from Gucci" const val WRANGLER = "on my booty" } そしてこのJavaクラス: public class Scrap { @Named(OldTownRoad.COWBOY_HATS) public void lilNasXrefs() { System.out.println(OldTownRoad.COWBOY_HATS); System.out.println(OldTownRoad.WRANGLER); } } コンパイラーはprintln()呼び出しに満足しています。これは、使用文句を言うCOWBOY_HATSでは@NamedこのAndroidのメーカー3.5.3スクリーンショットに見られるように、「属性値が一定でなければならない」と言って、注釈: 私が試した@JvmStaticし、@JvmFieldそれらのconst val宣言が、コンパイラは、どちらものために有効であることを不平を言うconst性質。 私は同じ結果を得るcompanion object: class OldTownRoad { companion object { const val COWBOY_HATS = "from Gucci" const …
13 kotlin 

3
withTimeout関数でIllegalStateExceptionが発生する:イベントループはありません。runBlocking {…}を使用して開始します。Kotlin Multiplatform iOSクライアント
更新:最初にタイムアウトなしでコルーチンを実行し、次にwithTimeoutを実行すると機能します。しかし、最初にwithTimeoutコルーチンを実行すると、エラーが発生します。同じことが非同期にも当てはまります。 私はktorを使用してAPI呼び出しを実行するデモのkotlinマルチプラットフォームアプリケーションを作成しています。コルーチンレベルでwithTimeoutを使用しているので、ktorリクエストに構成可能なタイムアウト関数を設定したいと思います。 ネットワークAPIを使用した関数呼び出しを次に示します。 suspend fun <T> onNetworkWithTimeOut( url: String, timeoutInMillis: Long, block: suspend CoroutineScope.() -> Any): T { return withTimeout(timeoutInMillis) { withContext(dispatchers.io, block) } as T } suspend fun <T> onNetworkWithoutTimeOut(url: String, block: suspend CoroutineScope.() -> Any): T { return withContext(dispatchers.io, block) as T } iOSMainモジュールのAppDispatcherクラスを次に示します。 @InternalCoroutinesApi actual class AppDispatchersImpl …

2
Moshi 1.9.1 Kotlinタイプをシリアル化できません
Moshi 1.8.0を使用してデータをシリアライズ/デシリアライズする作業コードがあります 1.9.1にアップグレードすると、シリアライズしようとするとクラッシュするようになりました。 java.lang.IllegalArgumentException:Kotlinタイプcom.xxx.Spotをシリアル化できません。kotlin-reflectを使用しないKotlinクラスのリフレクトシリアライズには、未定義の予期しない動作があります。moshi-kotlinアーティファクトのKotlinJsonAdapterを使用するか、moshi-kotlin-codegenアーティファクトのコードgenを使用してください。 シリアライザのコードは次のとおりです。 val moshi = Moshi.Builder().build() val dataListType = newParameterizedType(List::class.java, T::class.java) val adapter: JsonAdapter<List<T>> = moshi.adapter(dataListType) val json = adapter.toJson(dataList) 対応するTクラスは @IgnoreExtraProperties data class Spot( var id: String = "", var localizedName: String? = null, var type: String = "", var location: Location? = null ) ここで何をすればいいのか全く分かりません。 …
12 android  kotlin  moshi 

8
androidsdk.modulesが見つかりませんでした
そのため、プログラムの実行中に、build.gradleがこのエラーで失敗しました。つまり、実際には1秒前に機能し、1秒後には機能しませんでした。私はグラドルで何も変更しませんでした。 Could not find androidsdk.modules:shield:unspecified. Required by: project :app > com.facebook.android:facebook-login:5.15.2 project :app > com.facebook.android:facebook-core:5.15.2 project :app > com.facebook.android:facebook-common:5.15.2 Search in build.gradle files これが私のグラドルです。 apply plugin: 'com.android.application' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-android' android { compileSdkVersion 28 buildToolsVersion "29.0.2" defaultConfig { multiDexEnabled true applicationId "com.example.casualdatingapp" minSdkVersion 26 targetSdkVersion 28 versionCode …

3
Android RecognitionListener:onResultsが2回呼び出される
Kotlinで記述されたRecognitionListenerを使用するプロジェクトがあります。スピーチからテキストへの変換機能は常に成功し、問題が発生することはありませんでした。 先週から、onResult関数が2回呼び出され始めました。プロジェクトは変更されていません。私はプロジェクトの古いバージョン(数か月前から)をテストしましたが、それらには同じ問題がありました。 3つの異なるケースがあります。 小さなテキスト(1〜8ワード)とSpeechRecognizerが自動的に停止される-> onResult()が2回呼び出される。 大きなテキスト(9ワード以上)とSpeechRecognizerが自動的に停止される->通常の動作(onResult()が1回呼び出される)。 任意のテキストサイズとSpeechRecognizer stopListening()関数が手動で(コードから)呼び出される->通常の動作。 VoiceRecognitionの音声テキスト変換クラスコードを次に示します。 class VoiceRecognition(private val activity: Activity, language: String = "pt_BR") : RecognitionListener { private val AudioLogTag = "AudioInput" var voiceRecognitionIntentHandler: VoiceRecognitionIntentHandler? = null var voiceRecognitionOnResultListener: VoiceRecognitionOnResultListener? = null //Must have this var voiceRecognitionLayoutChanger: VoiceRecognitionLayoutChanger? = null var isListening = false private val …

2
Kotlin FlowとLiveData
前回のGoogle I / Oで、Jose AlcerrecaとYigit Boyar は、LiveDataを使用してデータをフェッチすることはもうやめるべきだと言っていました。ここで、ワンショットフェッチに中断関数を使用し、Kotlinのフローを使用してデータストリームを作成する必要があります。コルーチンはワンショットフェッチや挿入などの他のCRUD操作に最適であることに同意します。しかし、データストリームが必要な場合、Flowがどのような利点をもたらすかわかりません。LiveDataも同じことをしているようです。 フローの例: ViewModel val items = repository.fetchItems().asLiveData() リポジトリー fun fetchItems() = itemDao.getItems() ダオ @Query("SELECT * FROM item") fun getItems(): Flow<List<Item>> LiveDataの例: ViewModel val items = repository.fetchItems() リポジトリー fun fetchItems() = itemDao.getItems() ダオ @Query("SELECT * FROM item") fun getItems(): LiveData<List<Item>> また、コルーチンとFlowを使用してRoomまたはRetrofitを操作するプロジェクトの例もいくつか見たいと思います。コルーチンがワンショットフェッチに使用され、変更時にデータを手動で再フェッチするGoogleのToDoサンプルのみが見つかりました。

2
Kotlinコルーチンは「前に起こる」保証をしますか?
Kotlinコルーチンは「前に起こる」保証を提供しますか? たとえばmutableVar、この場合、他のスレッドへの(潜在的に)書き込みとその後の読み取りの間に「前に起こる」保証があります。 suspend fun doSomething() { var mutableVar = 0 withContext(Dispatchers.IO) { mutableVar = 1 } System.out.println("value: $mutableVar") } 編集: たぶん、追加の例は、(変更可能性を除いて)Kotlinっぽいので、問題をより明確にするでしょう。このコードはスレッドセーフですか? suspend fun doSomething() { var data = withContext(Dispatchers.IO) { Data(1) } System.out.println("value: ${data.data}") } private data class Data(var data: Int)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.