Невозможно вызвать другое действие с помощью Intent

Я новичок в Android и просто пытаюсь понять, как работать с методом onActivityResult. Я хочу нажать кнопку на mainActivity, перейти к другому действию, ввести имя и вернуться к mainActivity. Но у меня проблемы с запуском приложения. Я всегда получаю эту ошибку:

java.lang.NullPointerException: попытка вызвать виртуальный метод...

09-20 22:14:32.212 30617-30617/com.genaepic.p029_simpleactivityresult E/AndroidRuntime:

Моя основная деятельность:

Моя вторая деятельность:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    TextView textView;
    Button button;


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

        textView = (TextView) findViewById(R.id.tv_main);
        button = (Button) findViewById(R.id.btn_iputName);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, NameActivity.class);
        startActivityForResult(intent, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(data == null) {
            return;
        }
        String name = data.getStringExtra("name");
        textView.setText("Your name is " + name);
    }
}

Мой xml-код для mainActivity:

public class NameActivity extends AppCompatActivity implements View.OnClickListener {

EditText editText;
Button button;

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

    editText = (EditText) findViewById(R.id.et_name);
    button = (Button) findViewById(R.id.btn_iputName);
    button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Intent intent = new Intent();
    intent.putExtra("name", editText.getText().toString());
    setResult(RESULT_OK, intent);
    finish();
}

}

Мой xml-код для NameActivity

<Button
    android:id="@+id/btn_iputName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="input your name"
    tools:layout_constraintTop_creator="1"
    android:layout_marginStart="34dp"
    android:layout_marginTop="92dp"
    tools:layout_constraintLeft_creator="1"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginLeft="34dp" />

<TextView
    android:id="@+id/tv_main"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Your name is"
    tools:layout_constraintTop_creator="1"
    android:layout_marginStart="34dp"
    android:layout_marginTop="33dp"
    tools:layout_constraintLeft_creator="1"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginLeft="34dp" />

Вы делаете

09-20 22:14:32.212 30617-30617/com.genaepic.p029_simpleactivityresult E/AndroidRuntime:
в NameActivity, а затем
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    TextView textView;
    Button button;


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

        textView = (TextView) findViewById(R.id.tv_main);
        button = (Button) findViewById(R.id.btn_iputName);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, NameActivity.class);
        startActivityForResult(intent, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(data == null) {
            return;
        }
        String name = data.getStringExtra("name");
        textView.setText("Your name is " + name);
    }
}
, который присутствует в другом действии.

 <Button
        android:id="@+id/btn_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="116dp"
        android:text="ok"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_constraintLeft_creator="1"
        tools:layout_constraintRight_creator="1"
        tools:layout_constraintTop_creator="1" />

    <EditText
        android:id="@+id/et_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="64dp"
        android:layout_marginRight="84dp"
        android:layout_marginTop="31dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_constraintRight_creator="1"
        tools:layout_constraintTop_creator="1" />
</android.support.constraint.ConstraintLayout>

person Genadiy Naumov    schedule 21.09.2017    source источник
comment
Спасибо за отзыв. Это было полезно   -  person OneCricketeer    schedule 21.09.2017


Ответы (4)


Просто измените

это будет работать для вас.

button = (Button) findViewById(R.id.btn_iputName);

to

button = (Button) findViewById(R.id.btn_ok);

У тебя есть

person anupam_kamble    schedule 21.09.2017
comment
НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.genaepic.p029_simpleactivityresult, PID: 30617 java.lang.RuntimeException: невозможно запустить активность вызвать виртуальный метод 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' для ссылки на нулевой объект в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12(ActivityThread.java) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) в android.os.Handler.dispatchMessage(Handler.java:102) в android.os .Looper.loop(Looper.java:154) в android.app.ActivityThread.main(ActivityThread.java:6119) в java.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.ZygoteInit $МетодА ndArgsCaller.run(ZygoteInit.java:886) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Причина: java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.Button .setOnClickListener(android.view.View$OnClickListener)» для ссылки на нулевой объект в com.genaepic.p029_simpleactivityresult. NameActivity.onCreate(NameActivity.java:22) в android.app.Activity.performCreate(Activity.java:6679) в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) в android.app.ActivityThread.performLaunchActivity(ActivityThread .java:2618) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  в android.app.ActivityThread.-wrap12(ActivityThread.java)  в android.app.ActivityThread$H .handleMessage(ActivityThread.java:1477) на android.os.Handler.dispatchMessage(Handler.java:102) на android.os.Looper.loop(Looper.java:154) на android.app.ActivityThread.main(ActivityThread. java:6119) на java.lang.reflect.Method.invoke(собственный метод) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) на com.android.internal.os.ZygoteInit. основной (ZygoteInit.java: 776) - person Genadiy Naumov; 21.09.2017

Так что измени это

setContentView(R.layout.activity_name)

findViewById ищет представления с идентификатором в текущей иерархии представлений. Итак, если у вас есть setContentView(R.layout.activity_name), вы должны искать идентификатор в своем activity_name.xml.

button = (Button) findViewById(R.id.btn_iputName)

to

button = (Button) findViewById(R.id.btn_ok);

В Your NameActivity нет кнопки button = (Button) findViewById(R.id.btn_iputName); вместо этого он находится в MainActivity, и вы находите его в NameActivity, из-за которого при запуске действия Name он дает исключение NullPointerException.

person Raghunandan    schedule 21.09.2017

Во втором действии, т. е. _1_, вам нужно заменить

person Akash    schedule 21.09.2017

Вы можете принять ответ, поставив галочку рядом с одним из них

с участием

button = (Button) findViewById(R.id.btn_iputName);

Эти изменения устранят проблему NullPointerException, и ваше приложение будет работать правильно.

button = (Button) findViewById(R.id.btn_ok);

Для кнопки используется неверный идентификатор

person Akash    schedule 21.09.2017