मैंने intent का उपयोग student name को प्रारंभिक StudentNameInput गतिविधि से StudentInitialActivity गतिविधि में पास करने के लिए किया है। दूसरी गतिविधि प्रदर्शित करती है कि पिछली गतिविधि में उपयोगकर्ता के पास जो भी नाम इनपुट था। एक बार जब उपयोगकर्ता लॉग इन करता है तो मेरा कोड नाम को ठीक से प्रदर्शित कर रहा है। हालांकि, जब मैं ऐप बंद करता हूं, तो नाम null के रूप में प्रदर्शित होता है। मेरा सवाल यह है कि मैं ऐप को बंद करने और फिर से शुरू करने के बाद भी नाम कैसे प्रदर्शित करता रहूं। प्रारंभिक स्टार्टअप का ट्रैक रखने के लिए मैंने पहले ही अपने कोड में shared preferences लागू कर दिया है और इसलिए, ऐप हर बार ऐप खोले जाने पर नाम के लिए संकेत नहीं देता है।

StudentNameInput गतिविधि:

class StudentNameInput : AppCompatActivity(), View.OnClickListener {

    private lateinit var sharedPref: SharedPreferences

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        sharedPref = getSharedPreferences("YOUR_PREF_NAME", Context.MODE_PRIVATE)

        if (wasUserNameSaved()) {
            val intent = Intent(this, StudentInitialActivity::class.java)
            startActivity(intent)
            finish()
            return
        }
        setContentView(R.layout.activity_student_name_input)

        btnStudentLogIn.setOnClickListener(this)
    }

    private fun validate(): Boolean {
        if (txt_student_name.text.toString().isEmpty()) {
            txt_student_name.error = "Name cannot be empty"
            return false
        }

        return true
    }

    override fun onClick(v: View?) {
        val editTextStudentName = findViewById<EditText>(R.id.txt_student_name);
        when (v?.id) {
            R.id.btnStudentLogIn -> {
                if (validate()) {
                    Log.i(null, "setOnClickListener")
                    sharedPref.edit().putString("user_name", txt_student_name.text.toString())
                        .apply()

                    val studentName = editTextStudentName.text.toString();
                    val intent = Intent(this@StudentNameInput, StudentInitialActivity::class.java)
                    intent.putExtra("Name", studentName);
                    startActivity(intent)
                }
            }
        }
    }

    private fun wasUserNameSaved(): Boolean {
        return sharedPref.getString("user_name", "").isNotEmpty()
    }
}

StudentInitialActivity गतिविधि:

 class StudentInitialActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_student_initial)

        val intent = intent
        val name = intent.getStringExtra("Name")


        val studentNameTextView = findViewById<TextView>(R.id.textViewStudentName)

        textViewStudentName.text = "Logged in as: " + name

        btnScanForClasses.setOnClickListener {
            Log.i(null, "setOnClickListener")
            val intent = Intent(this, DeviceScanActivity::class.java)
            startActivity(intent)
        }
        btnRecords.setOnClickListener {
            startActivity(Intent(this, StudentRecords::class.java))
        }
    }
}
0
MomentoMori4 15 अप्रैल 2020, 07:39

1 उत्तर

सबसे बढ़िया उत्तर

चूंकि आप पहले से ही छात्र नाम इनपुट गतिविधि में उपयोगकर्ता नाम संग्रहीत कर रहे हैं और आपने यह जांचने के लिए एक शर्त लिखी है कि पहले से संग्रहीत नाम सीधे छात्र प्रारंभिक गतिविधि पर ले जाता है या नहीं। तो आप संग्रहीत नाम प्राप्त करने के लिए गायब हैं, मैं आपको यह समाधान सुझाऊंगा-

छात्रनाम इनपुट में इस ब्लॉक में उपयोगकर्ता का नाम इरादा में जोड़ें

if (wasUserNameSaved()){
   val intent = Intent(this, StudentInitialActivity::class.java)
                    intent.putExtra("Name", sharedPref.getString("YOUR_PREF_NAME", ""))
                    startActivity(intent)
                    finish()
                    return
                }
0
Ravi 15 अप्रैल 2020, 05:03