इसलिए मैं सीखने की कोशिश कर रहा हूं कि इंस्टाग्राम जैसा ऐप कैसे बनाया जाए।

और मैंने लॉगिन और साइनअप गतिविधियां बनाईं।

मेरी समस्या अब यह है कि मेरे पास एक टेक्स्टव्यू है जिसे क्लिक करने योग्य माना जाता है और मुझे एक अलग गतिविधि में बदल दिया जाता है।

sign_up_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            finish();
            Intent signUpIntent = new Intent(LoginActivity.this, RegistrationActivity.class);
            startActivity(signUpIntent);
        }
    });

कोड का यह टुकड़ा मुझे पंजीकरण गतिविधि पर स्विच करना चाहिए, लेकिन जब मैं टेक्स्टव्यू पर क्लिक करता हूं तो यह स्क्रीन को फ्लैश करता है लेकिन लॉगिन पेज पर रहता है। फिर जब मैं टेक्स्टव्यू पर फिर से क्लिक करता हूं तो यह ऐप को क्रैश कर देता है और मुझे यह त्रुटि देता है।

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.ssmc.instagram.RegistrationActivity.onCreate(RegistrationActivity.java:58)

त्रुटि पंजीकरण गतिविधि में कोड के इस टुकड़े का जिक्र कर रही है।

signing_up_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            register();
        }
    });

लेकिन यह वह बटन है जो एक खाता पंजीकृत करने के लिए है। लेकिन ऐप में एक्सएमएल पेज अभी भी लॉगिन गतिविधि है और यह पंजीकरण गतिविधि में नहीं बदला है।

संपादित करें: sign_up_btn चर यह है:

sign_up_btn = (TextView) findViewById(R.id.sign_up_btn);

संपादित 2: कुछ ने गतिविधियों की एक्सएमएल व्यू फाइलों को देखने के लिए कहा। तो वे यहाँ हैं।

गतिविधि_लॉगिन.एक्सएमएल

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:id="@+id/login_container"
    android:padding="40dp"
    android:background="@drawable/animation_color"
    tools:context=".LoginActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:src="@drawable/instagram_logo"
        android:layout_marginBottom="40dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="Username"
        android:textColor="@color/colorWhite"
        android:textSize="20sp"
        android:backgroundTint="#fff"
        android:drawableLeft="@drawable/ic_profile"
        android:inputType="textPersonName"
        android:id="@+id/login_user_name"
        android:drawablePadding="10dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="Password"
        android:textColor="@color/colorWhite"
        android:textSize="20sp"
        android:backgroundTint="#fff"
        android:drawableLeft="@drawable/ic_lock"
        android:inputType="textPassword"
        android:id="@+id/login_password"
        android:drawablePadding="10dp" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:id="@+id/login_btn"
        android:text="@string/log_in"
        android:textColor="#cccccc"
        android:background="@color/colorPurple"
        android:textAllCaps="false"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="Not a member, Sign up now!"
        android:textColor="#ffffff"
        android:textSize="16dp"
        android:id="@+id/sign_up_btn" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="Forgot Password?"
        android:textColor="#ffffff"
        android:textSize="16dp"
        android:id="@+id/forgot_pass_btn"/>


</LinearLayout>

और गतिविधि_पंजीकरण.एक्सएमएल

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:id="@+id/login_container"
    android:padding="40dp"
    android:background="@drawable/animation_color"
    tools:context=".LoginActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:src="@drawable/instagram_logo"
        android:layout_marginBottom="40dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="Email"
        android:textColor="@color/colorWhite"
        android:textSize="20sp"
        android:backgroundTint="#fff"
        android:drawableLeft="@drawable/ic_email"
        android:inputType="textPersonName"
        android:id="@+id/register_user_email"
        android:drawablePadding="10dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="Username"
        android:textColor="@color/colorWhite"
        android:textSize="20sp"
        android:backgroundTint="#fff"
        android:drawableLeft="@drawable/ic_profile"
        android:inputType="textPersonName"
        android:id="@+id/register_user_name"
        android:drawablePadding="10dp"/>


    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="Password"
        android:textColor="@color/colorWhite"
        android:textSize="20sp"
        android:backgroundTint="#fff"
        android:drawableLeft="@drawable/ic_lock"
        android:inputType="textPassword"
        android:id="@+id/register_password"
        android:drawablePadding="10dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="Confirm Password"
        android:textColor="@color/colorWhite"
        android:textSize="20sp"
        android:backgroundTint="#fff"
        android:drawableLeft="@drawable/ic_lock"
        android:inputType="textPassword"
        android:id="@+id/register_password_confirm"
        android:drawablePadding="10dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:id="@+id/signing_up_btn"
        android:text="Sign Up"
        android:textColor="#cccccc"
        android:background="@color/colorPurple"
        android:textAllCaps="false"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="Already have an Account?"
        android:textColor="#ffffff"
        android:textSize="16dp"
        android:id="@+id/go_to_login_btn"/>

</LinearLayout>

संपादित करें 3: यहां लॉगिन एक्टिविटी के लिए मुख्य कोड है:

public class LoginActivity extends AppCompatActivity {

    LinearLayout mLoginContainer;
    AnimationDrawable mAnimationDrawable;

    EditText username_et, password_et;
    ProgressDialog mProgressDialog;
    Button login_btn;

    TextView sign_up_btn, forgot_pass_btn;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mLoginContainer = (LinearLayout) findViewById(R.id.login_container);
        mAnimationDrawable = (AnimationDrawable) mLoginContainer.getBackground();
        mAnimationDrawable.setEnterFadeDuration(5000);
        mAnimationDrawable.setExitFadeDuration(2000);

        username_et = (EditText) findViewById(R.id.login_user_name);
        password_et = (EditText) findViewById(R.id.login_password);
        mProgressDialog = new ProgressDialog(this);
        login_btn = (Button) findViewById(R.id.login_btn);

        sign_up_btn = (TextView) findViewById(R.id.sign_up_btn);
        forgot_pass_btn = (TextView) findViewById(R.id.forgot_pass_btn);

        login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LogIn();
            }
        });

        sign_up_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signUpIntent = new Intent(LoginActivity.this, RegistrationActivity.class);
                signUpIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(signUpIntent);
            }
        });

        forgot_pass_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                
            }
        });

    }
}

और यह पंजीकरण गतिविधि के लिए कोड है:

public class RegistrationActivity extends AppCompatActivity {

    LinearLayout mRegistrationContainer;
    AnimationDrawable mAnimationDrawable;

    EditText user_email_et, user_name_et, password_et, password_confirm_et;
    ProgressDialog mProgressDialog;
    Button signing_up_btn;
    TextView go_to_login_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mRegistrationContainer = (LinearLayout) findViewById(R.id.login_container);
        mAnimationDrawable = (AnimationDrawable) mRegistrationContainer.getBackground();
        mAnimationDrawable.setEnterFadeDuration(5000);
        mAnimationDrawable.setExitFadeDuration(2000);

        user_email_et = (EditText) findViewById(R.id.register_user_email);
        user_name_et = (EditText) findViewById(R.id.register_user_name);
        password_et = (EditText) findViewById(R.id.register_password);
        password_confirm_et = (EditText) findViewById(R.id.register_password_confirm);
        mProgressDialog = new ProgressDialog(this);
        signing_up_btn = (Button) findViewById(R.id.signing_up_btn);
        go_to_login_btn = (TextView) findViewById(R.id.go_to_login_btn);

        signing_up_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                register();
            }
        });

        go_to_login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
                startActivity(new Intent(RegistrationActivity.this, LoginActivity.class));
            }
        });

    }

}
1
Sami-M 26 जुलाई 2020, 15:13

4 जवाब

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

आपकी समस्या स्पष्ट है। RegistrationActivity लॉन्च किया गया है। हालांकि, RegistrationActivity.onCreate() में आप ऐसा करते हैं:

setContentView(R.layout.activity_login);

तो आप RegistrationActivity से लेआउट फ़ाइल के बजाय फिर से LoginActivity से लेआउट XML फ़ाइल का उपयोग कर रहे हैं। यही कारण है कि स्क्रीन "चमकती" है लेकिन बदलती नहीं दिखती है। यह बदल रहा है, लेकिन लेआउट पिछले Activity के समान है। यह यह भी बताता है कि setOnClickListener() पर कॉल क्यों विफल हो जाती है, क्योंकि आप गलत लेआउट XML फ़ाइल का उपयोग कर रहे हैं।

1
David Wasser 29 जुलाई 2020, 00:06

finish(); को हटाने का प्रयास करें यह आपकी समस्या का समाधान करेगा

sign_up_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent signUpIntent = new Intent(LoginActivity.this, RegistrationActivity.class);
            signUpIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(signUpIntent);
        }
    });

आप फिनिश विधि का उपयोग करने के बजाय वर्तमान गतिविधि को साफ़ करने के लिए झंडे का उपयोग कर सकते हैं

1
Amin 26 जुलाई 2020, 15:22

संपादित करें: आपके प्रश्न को पूरी तरह समझने के बाद मैं आपको onClick पद्धति का उपयोग करने का सुझाव दूंगा।

बटन के लिए अपने एक्सएमएल कोड में निम्नलिखित जोड़ें android:onClick="gotoLogin" अब यह लाइन पर लाल क्लिक दिखाएगा और जावा फ़ाइल में अब विधि लागू करेगा और उस क्लिक क्रिया के लिए आप जो कोड करना चाहते हैं उसे जोड़ें। इसके द्वारा आपको जावा फ़ाइल में आईडी संसाधन जोड़ने की छूट है।

मुझे बताएं कि क्या यह काम करता है

1
CodeRED Innovations 27 जुलाई 2020, 04:55

समाप्त निकालें (); कोड से और एक्सएमएल में भी टेक्स्ट व्यू को क्लिक करने योग्य गलत पर सेट करें

0
Toussef khan 26 जुलाई 2020, 18:24