rretzbach
rretzbach

Reputation: 744

onActivityResult yields null Intent

In this case two activities A and B should interact in that way that A calls B for a result.

But A never gets any data back from B.

This code looks like any tutorial or SO question I have seen.

The debugging session confirmed that setResult is called.

This problem is robbing me of my motivation, would be nice if someone could point out what I am missing.

EDIT: The code doesn't work when executed on my physical target device, but runs find on a nexus 5 device. What could I try to find out why?

MainActivity.java

package iifym.apps.rnoennig.de.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
    }

    public void onClick(View view) {
        Intent in = new Intent(this, SecondActivity.class);
        in.putExtra("mau", "bar");
        startActivityForResult(in, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // data is null ;(
        Toast.makeText(this, String.valueOf(data), Toast.LENGTH_SHORT).show();
    }
}

SecondActivity.java

package iifym.apps.rnoennig.de.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.second);

        Toast.makeText(this, String.valueOf(getIntent()), Toast.LENGTH_SHORT).show();
    }

    public void onClick(View view) {
        setResult(RESULT_OK, new Intent().putExtra("foo", "bar"));
        finish();
    }
}

layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_gravity="center_horizontal"
        android:onClick="onClick"
        />
</LinearLayout>

layout/second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button2"
        android:layout_gravity="center_horizontal"
        android:onClick="onClick"
        />
</LinearLayout>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="iifym.apps.rnoennig.de.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>

    </application>

</manifest>

Upvotes: 0

Views: 57

Answers (1)

OneCricketeer
OneCricketeer

Reputation: 191681

Works for me. (Same layouts and Manifest).

Main

public class MainActivity extends AppCompatActivity {

    public static final int MAIN_REQUEST = 1;

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

    public void onClick(View v) {
        Intent in = new Intent(MainActivity.this, SecondActivity.class);
        in.putExtra("mau", "start 2nd");
        startActivityForResult(in, MAIN_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == MAIN_REQUEST) {
            if (resultCode == RESULT_OK) {
                Toast.makeText(MainActivity.this, data.getStringExtra("foo"), Toast.LENGTH_SHORT).show();
            }
        }
    }
}

Second

public class SecondActivity extends AppCompatActivity {

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

        Intent sent = getIntent();
        if (sent != null) {
            Toast.makeText(SecondActivity.this, sent.getStringExtra("mau"), Toast.LENGTH_SHORT).show();
        }
    }

    public void onClick(View v) {
        setResult(RESULT_OK,  new Intent().putExtra("foo", "finish 2nd"));
        finish();
    }
}

Upvotes: 1

Related Questions