Fatal Exception: java.lang.RuntimeException: Unable to pause activity {org.altruist.BajajExperia/com.altruist.healthcard.activities.HealthCardActivity}: java.lang.NullPointerException: Attempt to read from field 'boolean je.w' on a null object reference
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4736)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4687)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4639)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:46)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7814)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
Activity Code
package com.altruist.healthcard.activities
import android.app.Activity
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Color
import android.graphics.Typeface
import android.net.Uri
import android.os.Bundle
import android.text.Spannable
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.res.ResourcesCompat
import androidx.core.widget.NestedScrollView
import androidx.fragment.app.FragmentManager
import com.altruist.healthcard.R
import com.altruist.healthcard.analytics.AnalyticsEvents
import com.altruist.healthcard.config.Constants
import com.altruist.healthcard.config.Constants.cardLimit
import com.altruist.healthcard.config.Constants.cardNo
import com.altruist.healthcard.config.Constants.cityName
import com.altruist.healthcard.config.Constants.dob
import com.altruist.healthcard.config.Constants.email
import com.altruist.healthcard.config.Constants.firstName
import com.altruist.healthcard.config.Constants.gender
import com.altruist.healthcard.config.Constants.keyPaymentId
import com.altruist.healthcard.config.Constants.languageJSON
import com.altruist.healthcard.config.Constants.lastName
import com.altruist.healthcard.config.Constants.mobile
import com.altruist.healthcard.config.Constants.name
import com.altruist.healthcard.config.Constants.state
import com.altruist.healthcard.fragments.OTPReadBottomSheetFragment
import com.altruist.healthcard.models.GetOtpDTO
import com.altruist.healthcard.models.SendRequestDTO
import com.altruist.healthcard.network.APIClient
import com.altruist.healthcard.network.APIInterface
import com.altruist.healthcard.preferences.PreferenceHelper
import com.altruist.healthcard.progressdialog.FullScreenProgressBar
import com.altruist.healthcard.receivers.NetworkChangeReceiver
import com.altruist.healthcard.utility.CommonUtils
import com.altruist.healthcard.utility.CommonUtils.showIndefiniteSnackBar
import com.altruist.healthcard.utility.CommonUtils.showSnackBar
import com.google.android.material.bottomsheet.BottomSheetBehavior
import kotlinx.android.synthetic.main.content_health_card.*
import kotlinx.android.synthetic.main.layout_bottom_sheet_price_break_up.*
import org.json.JSONObject
import retrofit2.Call
import retrofit2.Response
import java.io.UnsupportedEncodingException
class HealthCardActivity : AppCompatActivity(), View.OnClickListener {
lateinit var toolbar: Toolbar
var sheetBehavior: BottomSheetBehavior<CoordinatorLayout>? = null
var tvTitle: TextView? = null
var offerType: String? = null
lateinit var boldFont: Typeface
lateinit var regularFont: Typeface
var paymentId: String? = null
lateinit var networkChangeReceiver: NetworkChangeReceiver
private var firstLaunch: Boolean = false
lateinit var obj: JSONObject
lateinit var TXT_VALID_TILL: String
lateinit var TXT_CARD_LIMIT: String
lateinit var TXT_GET_IT_NOW: String
lateinit var TXT_TNC_LABEL: String
lateinit var TXT_FEE_BREAKDOWN: String
lateinit var TXT_PREMIUM: String
lateinit var TXT_INTEGRATED_GST: String
lateinit var TXT_TOTAL_PREM_FEE: String
lateinit var TXT_APPROVED_LIMIT: String
lateinit var TXT_HEALTH_EMI_CARD: String
lateinit var TXT_SINGLE_SOLUTION: String
lateinit var TXT_ACCIDENTAL_COVER_LABEL: String
lateinit var TXT_FREE: String
lateinit var TXT_POWERFUL_NETWORK: String
lateinit var TXT_HEALTH_USE_ACCROSS: String
lateinit var TXT_FLEXIBLE_TENURE: String
lateinit var TXT_HEALTH_TENURE_PAY: String
lateinit var TXT_NO_DOCS: String
lateinit var TXT_EASY_ACCESS: String
lateinit var TXT_ONE_TIME_SUB: String
lateinit var TXT_GET_EASY_ACCESS: String
lateinit var TXT_TOP_PARTNERS: String
lateinit var TXT_FAQS: String
lateinit var TXT_WHAT_IS_HEALTH_CARD: String
lateinit var TXT_WHAT_HEALTH_DESC: String
lateinit var TXT_WHERE_USE_HEALTH_CARD: String
lateinit var TXT_WHERE_USE_HEALTH_CARD_DESC: String
lateinit var TXT_WHAT_TREATMENTS: String
lateinit var TXT_WHAT_TREATMENTS_DESC: String
lateinit var TXT_CARD_HOW_MUCH: String
lateinit var TXT_CARD_HOW_MUCH_DESC: String
lateinit var TXT_WHAT_LOAN_AMT: String
lateinit var TXT_WHAT_LOAN_AMT_DESC: String
lateinit var MEMBERSINCE: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_health_card)
if (intent.hasExtra("customerId")) {
Constants.customerID = intent.getStringExtra("customerId")!!
}
if (intent.hasExtra("name")) {
name = intent.getStringExtra("name")!!
tv_card_holder_name.text = name
}
if (intent.hasExtra("dob")) {
dob = intent.getStringExtra("dob")!!
}
if (intent.hasExtra("email")) {
email = intent.getStringExtra("email")!!
}
if (intent.hasExtra("mobileno")) {
mobile = intent.getStringExtra("mobileno")!!
}
if (intent.hasExtra("session")) {
Constants.userSession = intent.getStringExtra("session")!!
}
if (intent.hasExtra("cardLimit")) {
cardLimit = intent.getStringExtra("cardLimit").toString()
}
if (intent.hasExtra("cardNo")) {
cardNo = intent.getStringExtra("cardNo").toString()
}
if (intent.hasExtra("appLanguage")) {
languageJSON = intent.getStringExtra("appLanguage").toString()
}
if (intent.hasExtra("state")) {
state = intent.getStringExtra("state").toString()
}
if (intent.hasExtra("lastName")) {
lastName = intent.getStringExtra("lastName").toString()
}
if (intent.hasExtra("firstName")) {
firstName = intent.getStringExtra("firstName").toString()
}
if (intent.hasExtra("gender")) {
gender = intent.getStringExtra("gender").toString()
}
if (intent.hasExtra("cityName")) {
cityName = intent.getStringExtra("cityName").toString()
}
if (intent.hasExtra("offerType")) {
offerType = intent.getStringExtra("offerType")
}
setLanguageLabels()
setupToolbar()
tv_label_valid_till.text = TXT_VALID_TILL
tv_label_approved_limit.text = TXT_CARD_LIMIT
tv_get_it_noe.text = TXT_GET_IT_NOW
tv_get_it_now.text = TXT_GET_IT_NOW
tv_terms_and_conditions_start.text = TXT_TNC_LABEL
tv_terms_and_conditions_price_break_up.text = TXT_TNC_LABEL
tv_label_fee_breakdown.text = TXT_FEE_BREAKDOWN
tv_label_premium.text = TXT_PREMIUM
tv_label_int_gst.text = TXT_INTEGRATED_GST
tv_label_total_fee.text = TXT_TOTAL_PREM_FEE
tv_preapproved_limit_label.text = TXT_APPROVED_LIMIT
tv_title.text = TXT_HEALTH_EMI_CARD
tv_sub_title.text = TXT_SINGLE_SOLUTION
tv_one_lakh_cover.text = TXT_ACCIDENTAL_COVER_LABEL
tv_free.text = TXT_FREE
tv_powerful_nw.text = TXT_POWERFUL_NETWORK
tv_powerful_nw_desc.text = TXT_HEALTH_USE_ACCROSS
tv_flexi_tenure.text = TXT_FLEXIBLE_TENURE
tv_tenure_desc.text = TXT_HEALTH_TENURE_PAY
tv_no_docs.text = TXT_NO_DOCS
tv_easy_access.text = TXT_EASY_ACCESS
tv_onw_time_sub.text = TXT_ONE_TIME_SUB
tv_get_easy_access.text = TXT_GET_EASY_ACCESS
tv_title_partners.text = TXT_TOP_PARTNERS
tv_title_faq.text = TXT_FAQS
tv_question_1.text = TXT_WHAT_IS_HEALTH_CARD
tv_answer_1.text = TXT_WHAT_HEALTH_DESC
tv_question_2.text = TXT_WHERE_USE_HEALTH_CARD
tv_answer_2.text = TXT_WHERE_USE_HEALTH_CARD_DESC
tv_question_3.text = TXT_WHAT_TREATMENTS
tv_answer_3.text = TXT_WHAT_TREATMENTS_DESC
tv_question_4.text = TXT_CARD_HOW_MUCH
tv_answer_4.text = TXT_CARD_HOW_MUCH_DESC
tv_question_5.text = TXT_WHAT_LOAN_AMT
tv_answer_5.text = TXT_WHAT_LOAN_AMT_DESC
tv_label_member_since.text = MEMBERSINCE
sheetBehavior = BottomSheetBehavior.from(co_price_break_up)
paymentId = PreferenceHelper.getStringPreference(this, keyPaymentId)
iv_info.setOnClickListener {
if (sheetBehavior!!.state != BottomSheetBehavior.STATE_EXPANDED) {
sheetBehavior!!.setState(BottomSheetBehavior.STATE_EXPANDED)
} else {
sheetBehavior!!.setState(BottomSheetBehavior.STATE_COLLAPSED)
}
}
iv_close.setOnClickListener {
sheetBehavior!!.state = BottomSheetBehavior.STATE_HIDDEN
}
if (cardLimit.isNotEmpty())
tv_approved_limit_rs.text = "₹ ${cardLimit?.let { CommonUtils.formatAmt(it) }}"
if (offerType.equals("RA", ignoreCase = true)) {
ll_bottom_tandc.visibility = View.GONE
cl_health_card_pay_now.visibility = View.GONE
cl_approved_card_limit.visibility = View.GONE
// cl_health_card_apply_now.visibility = View.VISIBLE
ll_card_limit.visibility = View.VISIBLE
v_line.visibility = View.VISIBLE
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT
)
layoutParams.setMargins(0, 0, 0, 0)
ll_benefit_one.layoutParams = layoutParams
}
btn_apply_now.setOnClickListener(this)
ll_question_1.setOnClickListener(this)
ll_question_2.setOnClickListener(this)
ll_question_3.setOnClickListener(this)
ll_question_4.setOnClickListener(this)
ll_question_5.setOnClickListener(this)
ll_btn_get_it_now.setOnClickListener(this)
ll_btn_get_it_now_bottomsheet.setOnClickListener(this)
boldFont = ResourcesCompat.getFont(this, R.font.notosansbold)!!
regularFont = ResourcesCompat.getFont(this, R.font.notosansregular)!!
tv_terms_and_conditions_start.movementMethod = LinkMovementMethod.getInstance()
tv_terms_and_conditions_start.setText(
tv_terms_and_conditions_start.text,
TextView.BufferType.SPANNABLE
)
val mySpannable = tv_terms_and_conditions_start.text as Spannable
val myClickableSpan: ClickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
if (CommonUtils.isConnectingToInternet(this@HealthCardActivity)) {
try {
val browserIntent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.bajajfinserv.in/Health_card_tandC_PDF_Asset_Health-Card-TC-Revised-26-02-2020.pdf")
)
startActivity(browserIntent)
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
} else {
showSnackBar(
window.decorView.rootView,
"No Internet access!"
)
}
}
}
mySpannable.setSpan(myClickableSpan, 32, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
tv_terms_and_conditions_start.highlightColor = Color.TRANSPARENT
tv_terms_and_conditions_price_break_up.movementMethod = LinkMovementMethod.getInstance()
tv_terms_and_conditions_price_break_up.setText(
tv_terms_and_conditions_price_break_up.text,
TextView.BufferType.SPANNABLE
)
val mySpannableBottomSheet = tv_terms_and_conditions_price_break_up.text as Spannable
val myClickableSpanBottomSheet: ClickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
try {
if (CommonUtils.isConnectingToInternet(this@HealthCardActivity)) {
val browserIntent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.bajajfinserv.in/Health_card_tandC_PDF_Asset_Health-Card-TC-Revised-26-02-2020.pdf")
)
startActivity(browserIntent)
} else {
showSnackBar(
window.decorView.rootView,
"No Internet access!"
)
}
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
}
}
mySpannableBottomSheet.setSpan(
myClickableSpanBottomSheet,
32,
35,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
tv_terms_and_conditions_price_break_up.highlightColor = Color.TRANSPARENT
networkChangeReceiver = object : NetworkChangeReceiver() {
override fun onNetworkChange(isOnline: Boolean) {
if (!isOnline) {
showIndefiniteSnackBar(
window.decorView.rootView,
getString(R.string.message_no_internet)
)
} else {
if (!firstLaunch) {
showSnackBar(
window.decorView.rootView,
getString(R.string.message_online)
)
} else {
firstLaunch = false
}
}
}
}
sv_parent.setOnScrollChangeListener { v: NestedScrollView?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int ->
if (scrollY > 200) {
if (tvTitle?.visibility == View.GONE)
tvTitle?.visibility = View.VISIBLE
} else {
if (tvTitle?.visibility == View.VISIBLE)
tvTitle?.visibility = View.GONE
}
}
}
fun setupToolbar() {
try {
toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
val ivBack = findViewById<ImageView>(R.id.iv_back)
tvTitle = findViewById(R.id.tv_toolbar_title)
tvTitle!!.text = TXT_HEALTH_EMI_CARD
ivBack.setOnClickListener {
finish()
}
supportActionBar?.elevation = 0f
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.ll_question_1 -> {
if (iv_faq_1.tag.toString().equals("closed", ignoreCase = true)) {
tv_question_1.typeface = boldFont
iv_faq_1.tag = "open"
tv_answer_1.visibility = View.VISIBLE
iv_faq_1.animate().rotation(180F).start()
} else {
tv_question_1.typeface = regularFont
iv_faq_1.tag = "closed"
tv_answer_1.visibility = View.GONE
iv_faq_1.animate().rotation(0F).start()
}
}
R.id.ll_question_2 -> {
if (iv_faq_2.tag.toString().equals("closed", ignoreCase = true)) {
tv_question_2.typeface = boldFont
iv_faq_2.tag = "open"
tv_answer_2.visibility = View.VISIBLE
iv_faq_2.animate().rotation(180F).start()
} else {
tv_question_2.typeface = regularFont
iv_faq_2.tag = "closed"
tv_answer_2.visibility = View.GONE
iv_faq_2.animate().rotation(0F).start()
}
}
R.id.ll_question_3 -> {
if (iv_faq_3.tag.toString().equals("closed", ignoreCase = true)) {
tv_question_3.typeface = boldFont
iv_faq_3.tag = "open"
tv_answer_3.visibility = View.VISIBLE
iv_faq_3.animate().rotation(180F).start()
} else {
tv_question_3.typeface = regularFont
iv_faq_3.tag = "closed"
tv_answer_3.visibility = View.GONE
iv_faq_3.animate().rotation(0F).start()
}
}
R.id.ll_question_4 -> {
if (iv_faq_4.tag.toString().equals("closed", ignoreCase = true)) {
tv_question_4.typeface = boldFont
iv_faq_4.tag = "open"
tv_answer_4.visibility = View.VISIBLE
iv_faq_4.animate().rotation(180F).start()
} else {
tv_question_4.typeface = regularFont
iv_faq_4.tag = "closed"
tv_answer_4.visibility = View.GONE
iv_faq_4.animate().rotation(0F).start()
}
}
R.id.ll_question_5 -> {
if (iv_faq_5.tag.toString().equals("closed", ignoreCase = true)) {
tv_question_5.typeface = boldFont
iv_faq_5.tag = "open"
tv_answer_5.visibility = View.VISIBLE
iv_faq_5.animate().rotation(180F).start()
} else {
tv_question_5.typeface = regularFont
iv_faq_5.tag = "closed"
tv_answer_5.visibility = View.GONE
iv_faq_5.animate().rotation(0F).start()
}
}
R.id.ll_btn_get_it_now -> {
if (CommonUtils.isConnectingToInternet(this)) {
callOtp(this)
} else {
showSnackBar(
window.decorView.rootView,
"No Internet access!"
)
}
}
R.id.ll_btn_get_it_now_bottomsheet -> {
// if (paymentId == null || !CommonUtils.checkPaymentStatus(window.decorView.rootView,this))
if (CommonUtils.isConnectingToInternet(this)) {
callOtp(this)
} else {
showSnackBar(
window.decorView.rootView,
"No Internet access!"
)
}
}
R.id.btn_apply_now -> {
// if (paymentId == null || !CommonUtils.checkPaymentStatus(window.decorView.rootView,this))
startActivity(Intent(this, AppliedSuccessfulActivity::class.java))
finish()
}
}
}
private fun showOTPReadFragment() {
val bottomSheetFragment = OTPReadBottomSheetFragment()
val fragmentManager: FragmentManager = supportFragmentManager
bottomSheetFragment.isCancelable = false
bottomSheetFragment.show(fragmentManager, bottomSheetFragment.tag)
}
override fun onStart() {
super.onStart()
val intentFilter = IntentFilter(Constants.CONNECTIVITY_CHANGE)
this.registerReceiver(networkChangeReceiver, intentFilter)
firstLaunch = true
}
override fun onStop() {
super.onStop()
this.unregisterReceiver(networkChangeReceiver)
}
private fun setLanguageLabels() {
obj = JSONObject(languageJSON)
TXT_VALID_TILL = obj.getString("TXT_VALID_TILL")
TXT_CARD_LIMIT = obj.getString("TXT_CARD_LIMIT")
TXT_GET_IT_NOW = obj.getString("TXT_GET_IT_NOW")
TXT_TNC_LABEL = obj.getString("TXT_TNC_LABEL")
TXT_FEE_BREAKDOWN = obj.getString("TXT_FEE_BREAKDOWN")
TXT_PREMIUM = obj.getString("TXT_PREMIUM")
TXT_INTEGRATED_GST = obj.getString("TXT_INTEGRATED_GST")
TXT_TOTAL_PREM_FEE = obj.getString("TXT_TOTAL_PREM_FEE")
TXT_APPROVED_LIMIT = obj.getString("TXT_APPROVED_LIMIT")
TXT_HEALTH_EMI_CARD = obj.getString("TXT_HEALTH_EMI_CARD")
TXT_SINGLE_SOLUTION = obj.getString("TXT_SINGLE_SOLUTION")
TXT_ACCIDENTAL_COVER_LABEL = obj.getString("TXT_ACCIDENTAL_COVER_LABEL")
TXT_FREE = obj.getString("TXT_FREE")
TXT_POWERFUL_NETWORK = obj.getString("TXT_POWERFUL_NETWORK")
TXT_HEALTH_USE_ACCROSS = obj.getString("TXT_HEALTH_USE_ACCROSS")
TXT_FLEXIBLE_TENURE = obj.getString("TXT_FLEXIBLE_TENURE")
TXT_HEALTH_TENURE_PAY = obj.getString("TXT_HEALTH_TENURE_PAY")
TXT_NO_DOCS = obj.getString("TXT_NO_DOCS")
TXT_EASY_ACCESS = obj.getString("TXT_EASY_ACCESS")
TXT_ONE_TIME_SUB = obj.getString("TXT_ONE_TIME_SUB")
TXT_GET_EASY_ACCESS = obj.getString("TXT_GET_EASY_ACCESS")
TXT_TOP_PARTNERS = obj.getString("TXT_TOP_PARTNERS")
TXT_FAQS = obj.getString("TXT_FAQS")
TXT_WHAT_IS_HEALTH_CARD = obj.getString("TXT_WHAT_IS_HEALTH_CARD")
TXT_WHAT_HEALTH_DESC = obj.getString("TXT_WHAT_HEALTH_DESC")
TXT_WHERE_USE_HEALTH_CARD = obj.getString("TXT_WHERE_USE_HEALTH_CARD")
TXT_WHERE_USE_HEALTH_CARD_DESC = obj.getString("TXT_WHERE_USE_HEALTH_CARD_DESC")
TXT_WHAT_TREATMENTS = obj.getString("TXT_WHAT_TREATMENTS")
TXT_WHAT_TREATMENTS_DESC = obj.getString("TXT_WHAT_TREATMENTS_DESC")
TXT_CARD_HOW_MUCH = obj.getString("TXT_CARD_HOW_MUCH")
TXT_CARD_HOW_MUCH_DESC = obj.getString("TXT_CARD_HOW_MUCH_DESC")
TXT_WHAT_LOAN_AMT = obj.getString("TXT_WHAT_LOAN_AMT")
TXT_WHAT_LOAN_AMT_DESC = obj.getString("TXT_WHAT_LOAN_AMT_DESC")
MEMBERSINCE = obj.getString("MEMBERSINCE")
}
}
This is the Activity code. Something boolean field is there but I am not able to identify that. Maybe something in progaurd obfuscates the code. can anyone help me with this? Not even using a handler in this activity then also this crash occurring randomly on production. Does mapping will have the mapping for je.w field.