对kotlin.KotlinNullPointerException进行改装
从Sql server获取数据并获取数据json。这是一个json数据解析retofit2。 已创建登录活动,但其给定错误 MainActivity.kt对kotlin.KotlinNullPointerException进行改装,kotlin,retrofit2,Kotlin,Retrofit2,从Sql server获取数据并获取数据json。这是一个json数据解析retofit2。 已创建登录活动,但其给定错误 MainActivity.kt class MainActivity : AppCompatActivity() { internal lateinit var api : APIInterface private var compositeDisposable : CompositeDisposable? = null var userNa
class MainActivity : AppCompatActivity() {
internal lateinit var api : APIInterface
private var compositeDisposable : CompositeDisposable? = null
var userName : String? = null
var password : String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnLogin.setOnClickListener {
userName = tvUsername.text.toString()
password = tvPassword.text.toString()
getUserName(userName!!,password!!)
}
}
fun getUserName(user : String, pass : String){
val retrofit = APIClient.apIClient
if (retrofit != null) {
api = retrofit.create(APIInterface::class.java)
}
compositeDisposable!!.add(api.getLoginData(user, pass)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it.success.equals(1)){
val intent = Intent(this,Company::class.java)
startActivity(intent)
Toast.makeText(this,"Login Successfully!!!",Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this,"UserName or Password is Wrong!!!",Toast.LENGTH_LONG).show()
}
},{
Toast.makeText(this, it.message, Toast.LENGTH_LONG).show()
})
)
}
}
当Debbuger到达compositeDisposable时!!。添加(api.getLoginData(用户,通过)它的给定错误kotlin.kotlinNullPointerException
RestApi Url:
http://localhost/Account/Login.php?user=ABC&pass=1
APIClient.kt
object APIClient {
val BASE_URL = "http://10.0.2.2/Account/"
var retrofit:Retrofit? = null
val apIClient:Retrofit?
get() {
if (retrofit == null)
{
retrofit = Retrofit.Builder().
baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
return retrofit
}
}
APIInterface.kt
interface APIInterface {
@GET("Login.php")
fun getLoginData(@Query("user") user : String,
@Query("pass") pass : String) : Observable<LoginList>
}
接口api接口{
@获取(“Login.php”)
fun getloginda(@Query(“user”)user:String,
@查询(“传递”)传递:字符串):可观察
}
导致NullPointerException
的最可能原因是compositeDisposable
为null
在MyActivity
的开头,该变量被初始化为null
,然后它从未更改,因此当您使用!!
运算符时,会引发异常。
我认为您可以使用正确的值直接初始化compositeDisposable
,例如val compositeDisposable=compositeDisposable()
此外,
val
应尽可能优先于var
,因为不变性更容易控制,userName
和password
可能是局部变量,或者至少是private
您从未初始化过compositeDisposable
,然后强制打开它。