簡體   English   中英

NullPointerException 調用 getIntent().getStringExtra(...)

[英]NullPointerException calling getIntent().getStringExtra(…)

首先,我只是嘗試編碼,而且對 Firebase 的功能也很陌生。 問題是,我試圖通過輸入與該值關聯的數字來從 firebase 獲取特定值。 正如我將其設計為我的第一個活動 (Buffer2) 一樣,將序列號與 EditText 一起放置,從而將值從該活動傳遞給下一個活動 (Buffer3)。 並分配此 intent.getExtra 字符串,然后將其設為 int 以放置序列號。 但是這個過程會崩潰(或停止說它為空)。 有沒有另一種方法來完成這項工作? 任何幫助將不勝感激。

這是我用於 buffer2 和 buffer3 的代碼(xml 和 java)

buffer2 xml----------------------------

<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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Buffer2">

    <LinearLayout
        android:layout_gravity="center"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:id="@+id/etGo"
            android:hint="Go To Page No"
            android:inputType="number"
            android:textSize="18sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/btnGo"
            android:text="Go"
            android:textStyle="bold"
            android:textSize="18sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>
</LinearLayout>

Buffer2 java---------------------------------------

public class Buffer2 extends AppCompatActivity {

    Button BtnGo;
    EditText EtGo;

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

        BtnGo=findViewById(R.id.btnGo);
        EtGo=findViewById(R.id.etGo);
        String number = Buffer2.this.EtGo.getText().toString();

        BtnGo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Buffer2.this, Buffer3.class);
                intent.putExtra("numberto", number);
                startActivity(intent);
            }
        });


    }
}

buffer3 xml-------------------

<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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Buffer3">

    <TextView
        android:id="@+id/nameTv"
        android:textSize="28sp"
        android:gravity="center"
        android:text="Loading..."
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <TextView
        android:id="@+id/professionTv"
        android:textSize="28sp"
        android:gravity="center"
        android:text="Loading..."
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

</LinearLayout>

Buffer3 java--------------

public class Buffer3 extends AppCompatActivity {

    TextView Name, Profession;
    DatabaseReference reference;
    String Number = getIntent().getStringExtra("numberto");

    int count = Integer.parseInt(String.valueOf(Number));

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

        Name = findViewById(R.id.nameTv);
        Profession = findViewById(R.id.professionTv);

        reference=FirebaseDatabase.getInstance().getReference().child("What")
                .child(String.valueOf(count));
    }

    protected void onStart() {
        super.onStart();

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String name = dataSnapshot.child("name").getValue().toString();
                String type = dataSnapshot.child("type").getValue().toString();
                Name.setText(name);
                Profession.setText(type);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

日志貓------------

2020-04-22 18:39:48.939 11231-11231/com.potato.manpower I/Timeline: Timeline: Activity_launch_request time:419024820 intent:Intent { cmp=com.potato.manpower/.Buffer3 (has extras) }
2020-04-22 18:39:48.969 11231-11231/com.potato.manpower D/AndroidRuntime: Shutting down VM
2020-04-22 18:39:48.970 11231-11231/com.potato.manpower E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.potato.manpower, PID: 11231
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.potato.manpower/com.potato.manpower.Buffer3}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2649)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2808)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
        at com.potato.manpower.Buffer3.<init>(Buffer3.java:17)
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2639)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2808) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:165) 
        at android.app.ActivityThread.main(ActivityThread.java:6375) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802) 
2020-04-22 18:39:48.999 11231-11231/com.potato.manpower I/Process: Sending signal. PID: 11231 SIG: 9

Firebase 結構在此處輸入圖像描述

看起來getIntent()在這一行返回null

String Number = getIntent().getStringExtra("numberto");

如果將Number的初始化移到onCreate方法中,我希望這個問題會消失:


public class Buffer3 extends AppCompatActivity {
    TextView Name, Profession;
    DatabaseReference reference;
    String Number;

    int count = Integer.parseInt(String.valueOf(Number));

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

        Number = getIntent().getStringExtra("numberto");

        Name = findViewById(R.id.nameTv);
        Profession = findViewById(R.id.professionTv);

        reference=FirebaseDatabase.getInstance().getReference().child("What")
                .child(String.valueOf(count));
    }
    ...

其他一些注意事項:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM