【发布时间】:2020-10-25 11:02:51
【问题描述】:
我得到一个空指针异常
Logcat:
2020-07-05 10:42:52.821 20008-20008/com.riddhi.nfine E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.riddhi.nfine, PID: 20008
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.riddhi.nfine/com.riddhi.nfine.Income.AddBankFragment}: kotlin.KotlinNullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: kotlin.KotlinNullPointerException
at com.riddhi.nfine.Income.AddBankFragment.<init>(AddBankFragment.kt:195)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
此行专用val intent = activity!!.intent
我试图初始化意图,因为片段意图内部显示未解决的错误。
我尝试了各种解决方案,但都无法通过。
我的 Fragment 的全部代码:
@Suppress("DEPRECATION")
class AddBankFragment : Fragment() {
private lateinit var editBankName: EditText
private lateinit var editBankAc: EditText
private lateinit var editBankBalance: EditText
private lateinit var fabSave: FloatingActionButton
private lateinit var bankName: String
private lateinit var bankAc: String
private lateinit var bankBalance: String
private var getBankName:String = ""
private var getBankAc:String = ""
private var getBankBalance:String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
//columnCount = it.getInt
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_add_bank, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
editBankName = view!!.findViewById(R.id.enter_bank)
editBankAc = view!!.findViewById(R.id.edit_bank_ac)
editBankBalance = view!!.findViewById(R.id.edit_bank_balance)
fabSave = view!!.findViewById(R.id.fab_save)
checkIntentAndSetData()
editTextListener()
getCurrentDateAndTime()
fabSave.setOnClickListener {
if (!TextUtils.isEmpty(editBankName.text.toString()) && !TextUtils.isEmpty(
editBankAc.text.toString()) && !TextUtils.isEmpty(
editBankBalance.text.toString()
)
) {
!tilEnterBankName.isErrorEnabled
!tilEnterBankAc.isErrorEnabled
!tilEnterBankBalance.isErrorEnabled
bankName = editBankName.text.toString()
bankAc = editBankAc.text.toString()
bankBalance = editBankBalance.text.toString()
if(Companion.id ==0)
{
IncomeRepository.insertBankInDb(bankName, bankAc, bankBalance )
}
else{
IncomeRepository.updateBankInDb(Companion.id,bankName, bankAc, bankBalance)
}
getActivity()?.finish()
}
}
}
private fun editTextListener() {
editBankName.addTextChangedListener(textWatcher)
editBankAc.addTextChangedListener(textWatcher)
editBankBalance.addTextChangedListener(textWatcher)
}
var textWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
//Not required to check here
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
//Not required to check here
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
validation()
}
}
private fun validation() {
if (TextUtils.isEmpty(editBankName.text.toString())) {
tilEnterBankName.isErrorEnabled
tilEnterBankName.error = getString(R.string.please_enter_bank)
} else {
!tilEnterBankName.isErrorEnabled
tilEnterBankName.error = ""
}
if (TextUtils.isEmpty(editBankAc.text.toString())) {
tilEnterBankAc.isErrorEnabled
tilEnterBankAc.error = getString(R.string.please_enter_account_number)
} else {
!tilEnterBankAc.isErrorEnabled
tilEnterBankAc.error = ""
}
if (TextUtils.isEmpty(editBankBalance.text.toString())) {
tilEnterBankBalance.isErrorEnabled
tilEnterBankBalance.error = getString(R.string.please_enter_account_balance)
} else {
!tilEnterBankBalance.isErrorEnabled
tilEnterBankBalance.error = ""
}
}
@SuppressLint("SimpleDateFormat")
private fun getCurrentDateAndTime(): String {
var answer=""
answer = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val current = LocalDateTime.now()
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
current.format(formatter)
} else {
val date = Date()
val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
formatter.format(date)
}
return answer
}
private fun checkIntentAndSetData()
{
if(!TextUtils.isEmpty(intent.getStringExtra("banksName"))) {
getBankName = intent.getStringExtra("banksName")
}
if(!TextUtils.isEmpty(intent.getStringExtra("bankAc"))) {
getBankAc = intent.getStringExtra("bankAc")
}
if(!TextUtils.isEmpty(intent.getStringExtra("bankBalance"))) {
getBankBalance = intent.getStringExtra("bankBalance")
}
Companion.id = intent.getIntExtra("id",0)
if(!TextUtils.isEmpty(getBankName)){
editBankName.setText(getBankName)
editBankAc.setText(getBankAc)
editBankBalance.setText(getBankBalance)
}
}
val intent = activity!!.intent!!
companion object {
private var id: Int = 0
}
}
【问题讨论】:
标签: android android-fragments kotlin nullpointerexception