Tag: android

将用于复制资产文件的java代码转换为Android中的缓存文件夹到Kotlin的最佳实践

我使用这个代码来将Android中的Asset文件复制到缓存文件夹,重点在于它是一个Java代码,我将它转换为Kotlin,但是它看起来更多的是围绕while循环的Java(ish): val file = File(“${cacheDir.path}/$fileName”) val dir = file.parentFile dir.mkdirs() val inputStream = assets.open(fileName) val bufferedOutputStream = BufferedOutputStream(FileOutputStream(file)) val buf = ByteArray(10240) var num = inputStream.read(buf) // Java version: while ((num = fi.read(buf)) > 0) while (num > 0) { bufferedOutputStream.write(buf, 0, num) num = inputStream.read(buf) } bufferedOutputStream.close() inputStream.close() 任何能使Kotlin更为专业的专家。

如何在Kotlin中声明一个函数作为variables

所以我试图在Kotlin中创建一个监听器。 我只想传递一个将在我的代码中执行的方法。 喜欢这个: override fun setButtonClickListener(listener: (text: String) -> Unit) { this.listener = listener } 但是,当我宣布我的听众,我必须这样声明: private var listener : (text: String) -> Unit = null!! 否则,我的AS会抱怨。 但是这个 !! 在一个空对象接缝很奇怪。 我应该如何声明这个监听器? 谢谢!

如何检测Android应用程序何时进入后台并回到前台

我正在尝试编写一个应用程序,在经过一段时间之后将它带回到前台时执行某些特定的操作。 有没有办法来检测应用程序何时发送到后台或带到前台?

在一个片段上设置LayoutManager

我创建了一个片段,我试图实现一个recyclerView并加载一个列表。 当我尝试设置layoutManager时,问题即将到来 错误: java.lang.NullPointerException:尝试在com.gn.app的空对象引用上调用虚拟方法’void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView $ LayoutManager)’。 Fragments.StationsFragment.onCreateView(StationsFragment.kt:37) 我无法弄清楚什么是错的。 分段: class StationsFragment : Fragment() { companion object { val TAG: String = StationsFragment::class.java.simpleName fun newInstance() = StationsFragment() } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { activity.title = getString(R.string.title_home) val view = inflater?.inflate(R.layout.fragment_stations, container, false) rcViewStations.layoutManager = LinearLayoutManager(activity) val retrofit = Retrofit.Builder() .baseUrl(url) […]

Android – Kotlin – 对象必须声明为抽象或实现抽象成员

我为我的RecyclerView设置了一个ItemClickLister,像这样: ItemClickSupport.addTo(recyclerView!!).setOnItemClickListener( object : ItemClickSupport.OnItemClickListener { override fun onItemClicked(recyclerView: RecyclerView?, position: Int, v: View?) { val row = recyclerView!!.getChildAt(position) val el = row.findViewById(R.id.active_expandablelayout) as ExpandableLayout if (el.isExpanded) { el.collapse() } else { el.expand() } } } ) 使用我翻译成Kotlin的ItemClickSupport库。 我得到一个object (第2行)的错误,说: 对象必须声明为抽象或实现抽象成员。 我对Kotlin来说真的很陌生,在SO上我也找不到任何解决方案。 任何帮助是极大的赞赏。 编辑: 这是我的ItemClickSupport.kt : class ItemClickSupport private constructor(private val mRecyclerView: RecyclerView) { private […]

房间:Dao的LiveData将在每次更新时触发Observer.onChanged,即使LiveData值没有变化

我发现Dao返回的LiveData将在DB更新行时调用其观察者,即使LiveData值显然没有改变。 考虑下面的例子: 示例实体 @Entity public class User { public long id; public String name; // example for other variables public Date lastActiveDateTime; } 例如道 @Dao public interface UserDao { // I am only interested in the user name @Query(“SELECT name From User”) LiveData<List> getAllNamesOfUser(); @Update(onConflict = OnConflictStrategy.REPLACE) void updateUser(User user); } 在后台线程的某处 UserDao userDao = […]

RxAndroid / RxLifeCycle – 处理处理onError而不是onComplete

我正在尝试将RxLifeCycle实现到与RxJava联网中。 我一直在使用Consumer一个子Consumer ,但是对于RxLifeCycle ,你需要处理onError 。 所以我已经转移到Observer 。 这个问题是,当调用被处置时,它调用onComplete而不是onError ,我更喜欢。 buildle.gradle: // RxJava compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘io.reactivex.rxjava2:rxjava:2.0.3’ compile ‘com.trello.rxlifecycle2:rxlifecycle-kotlin:2.2.1’ compile ‘com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:2.2.1’ 我以前的NetworkConsumer是这样构建的,我会处理accept所有结果。 NetworkConsumer: abstract class NetworkConsumer : Consumer<NetworkResponse> { @Throws(Exception::class) override fun accept(response: NetworkResponse) { … } // to override open fun onSuccess(response: T) {} open fun onComplete() {} } 我的网络电话都使用Single结构化。 fun getFavorites(): Single<NetworkResponse<Array>> 我正在使用它。 service.getFavorites(…) […]

Kotlin数据类拷贝方法不是深拷贝所有成员

有人可以解释Kotlin数据类的copy方法是如何工作的吗? 对于一些成员来说,(深)副本似乎并没有真正创建,而且引用仍然是原来的。 fun test() { val bar = Bar(0) val foo = Foo(5, bar, mutableListOf(1, 2, 3)) println(“foo : $foo”) val barCopy = bar.copy() val fooCopy = foo.copy() foo.a = 10 bar.x = 2 foo.list.add(4) println(“foo : $foo”) println(“fooCopy: $fooCopy”) println(“barCopy: $barCopy”) } data class Foo(var a: Int, val bar: Bar, val list: MutableList = […]

Kotlin / Android应用程序 – 从外部活动更改视图元素

我正在使用kotlin lang来创建我的Android应用程序。 我想创建一个对象(单身人士),专门用于动态地(如按钮等)模仿我的主要活动的视图组件,并将由我的主要活动本身使用。 出现了一些问题。 首先,对象是(当然)不是活动types,所以我不能使用例如findViewById和其他活动的function等我试图通过传递主要活动的对象的构造函数来解决这个问题,但它是不允许的 – 因为对象不能他们的构造函数。 此外,我不知道,如果这个应用程序设计是可以接受的,至少有良好的做法。 如果不是真的 – 我应该使用什么样的设计模式来分离如何改变布局的逻辑和只修改视图元素的代码? 提前感谢您的任何建议。

GSON不能用自定义getter来反序列化Kotlin类

我有一堂课 class Address { var address1: String? = null } 简单的JSON String jsonString = “{\”address1\”:\”test\”}”; 所以我想要反序列化,所以我只是写 Gson gson = new GsonBuilder().create(); Address address = gson.fromJson(jsonString, Address.class); 它完美的作品。 但是,如果我添加自定义getter class Address { var address1: String? = null get() = address1 ?: “” } 我正在得到 java.lang.StackOverflowError at ru.reksoft.okey.models.Address.getAddress1(Address.kt:8) at ru.reksoft.okey.models.Address.getAddress1(Address.kt:8) //and here are a lot of same […]