前言
记录我遇到的kotlin与android的问题
第一篇Android与kotlin报错
第二篇Android与kotlin报错2
一百零一
错误信息
Textview显示STRING_TOO_LARGE
解决办法
减少TextView的文本内容
TextView最多能够显示10822个字符
总结
Textview中\n\n是空一行,\n是换行
文本最好用"文本内容"
来表示,添加冒号表示文本
一百零二
错误信息
使用TextInputLayout时会出现两条下横线的情况
解决办法
更改主题的样式为Theme.AppCompat.Light.NoActionBar或Theme.AppCompat.DayNight
一百零三
报错信息
ConstraintLayout嵌套SwipeRefreshLayout嵌套ScrollView嵌套Recyclerview时,使用宫格布局(StaggeredGridLayoutManager),不能正常显示
解决办法
将布局的嵌套的ScrollView去掉,recyclerview自带滚动视图
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/RecyclerViewBackgroundColor"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- 注意SwipeRefreshLayout节点必须使用完整路径 -->
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/srl_simple"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- SwipeRefreshLayout的下级必须是可滚动的视图 -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/RecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.recyclerview.widget.RecyclerView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
一百零四
报错信息
java.lang.ClassCastException: cn.leancloud.LCObject cannot be cast to com.example.secondhandtest.Goods
at com.example.secondhandtest.GoodsAdapter.onBindViewHolder(GoodsAdapter.kt:37)
at com.example.secondhandtest.GoodsAdapter.onBindViewHolder(GoodsAdapter.kt:19)
解决办法
严格按照leancloud的文档进行查询和添加,注意泛型一定是<LCObject>
或者<LCUser>
这样构建对象
代码如下
ReleaseGoodsTitle=binding.etReleaseGoodsname.text.toString()
ReleaseGoodsMessage=binding.etReleaseGoodsmessage.text.toString()
ReleaseGoodsMoney= Integer.valueOf(binding.etReleaseGoodsmoney.text.toString())
val currentUser:LCUser= LCUser.getCurrentUser()
val goods= Goods()
val goodsAdd:LCObject= LCObject("Goods")
goodsAdd.put("GoodsTitle",ReleaseGoodsTitle)
goodsAdd.put("GoodsMessage",ReleaseGoodsMessage)
goodsAdd.put("GoodsMoney",ReleaseGoodsMoney)
goodsAdd.put("GoodsUser",currentUser)
————————————————————————————————————————————
这样获取数据
代码如下
val goods: LCObject? =goodsList?.get(position)
Log.e(TAG, "GoodsAdapter获取对应的数据", )
holder.GoodsName.text=goods?.getString("GoodsTitle")
Log.e(TAG, "GoodsAdapter列表赋值GoodsName", )
holder.GoodsMonehy.text= goods?.getString("GoodMoney")
holder.GoodsMessage.text=goods?.getString("GoodsMessage")
val user= LCUser.getCurrentUser()
Log.e(TAG, "GoodsAdapter获取当前的用户", )
holder.GoodsUser.text=user.username
取数据也能通过objectId进行获取
一百零五
报错信息
leancloud注册失败,提示cn.leancloud.LCException: Username is missing or empty.
解决办法
注册的时候按照文档的要求来
错误示范
不要通过自己的实体类进行注册
val user= User(et_username.text.toString(),et_password.text.toString(),0)
即便是自己的user实体类继承了LCUser
data class User(@SerializedName("UserName")
var UserName:String,
@SerializedName("UserPassWord")
var UserPassWord:String,
@SerializedName("UserMoney")
var UserMoney:Int
):LCUser()
正确代码
val user:LCUser= LCUser()
user.username = et_username.text.toString()
user.setPassword(et_password.text.toString())
// user.username = et_username.text.toString()
// user.setPassword(et_password.text.toString())
user.signUpInBackground().subscribe(object:Observer<LCUser>{
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: LCUser) {
Toast.makeText(this@RegisterUserActivity, "注册成功", Toast.LENGTH_SHORT).show()
}
override fun onError(e: Throwable) {
Toast.makeText(this@RegisterUserActivity, "注册失败", Toast.LENGTH_SHORT).show()
Log.e(TAG, "注册失败"+e)
}
override fun onComplete() {
}
})
一百零六
报错信息
支付宝沙盒传入参数类型报错
传入参数是int类型,传入数据是string类型,将string转int类型,报错
java.lang.NumberFormatException: For input string: “250.0”
解决办法
更改传入参数是double类型,传入数据String转double类型
public static Map<String, String> buildOrderParamMap(String app_id, boolean rsa2,double PayMoney,String PayMessage) {}
double str = Double.parseDouble(ExploreDetailedGoodsMoney.getText().toString());
Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID,rsa2,str,ExploreDetailedGoodsMessage.getText().toString());
一百零七
报错信息
unable to connect to 127.0.0.1:5555:5555
解决办法
确定雷电模拟器有开启开发者模式和启用usb调试,就将雷电模拟器和AndroidStudio彻底关闭,然后再开启,就自动连接上去了