Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从第三个活动传输到第一个活动_Java_Android - Fatal编程技术网

Java 将数据从第三个活动传输到第一个活动

Java 将数据从第三个活动传输到第一个活动,java,android,Java,Android,从第一个活动我想去第二个,然后从第二个到第三个。在第三个活动中,我想在EditText中输入名称,然后在按下按钮后,转到第一个活动,同时发送在第三个活动中输入的信息 不幸的是,在第三个活动中按下按钮后,我没有返回到第一个活动,而是返回到第二个活动。第一个活动被杀死了吗?我可以做些什么来确保第一个活动的信息是正确的?这是我的代码: 第一: public class MainActivity extends AppCompatActivity { TextView textViewInfo

从第一个活动我想去第二个,然后从第二个到第三个。在第三个活动中,我想在EditText中输入名称,然后在按下按钮后,转到第一个活动,同时发送在第三个活动中输入的信息

不幸的是,在第三个活动中按下按钮后,我没有返回到第一个活动,而是返回到第二个活动。第一个活动被杀死了吗?我可以做些什么来确保第一个活动的信息是正确的?这是我的代码:

第一:

public class MainActivity extends AppCompatActivity {

    TextView textViewInformation;
    Button button_GoToSecond;

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

        textViewInformation = findViewById(R.id.textView);
        button_GoToSecond = findViewById(R.id.button);

        button_GoToSecond.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(MainActivity.this, Second.class);
                startActivity(i);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent i) {

        if((requestCode == 1) &&(resultCode == RESULT_OK)) {

            String name = i.getStringExtra("name");
            textViewInformation.setText(name);
        }
    }
}
第二:

public class Second extends AppCompatActivity {

    Button button_GoToThird;

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

        button_GoToThird = findViewById(R.id.button2);

        button_GoToThird.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(Second.this, Third.class);
                startActivity(i);
            }
        });
    }
}
第三:

public class Third extends AppCompatActivity {

    EditText editText_Data;
    Button button_SendData;

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

        editText_Data = findViewById(R.id.editText);
        button_SendData = findViewById(R.id.button3);

        button_SendData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                finish();
            }
        });

    }

    public void finish() {

        String name;
        name = editText_Data.getText().toString();

        Intent i = new Intent(Third.this, MainActivity.class);
        i.putExtra("name", name);

        setResult(RESULT_OK, i);
        super.finish();
    }
}

转到第二个活动的原因是:

 button_SendData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            finish();
        }
    });

 public void finish() {

    String name;
    name = editText_Data.getText().toString();

    Intent i = new Intent(Third.this, MainActivity.class);
    i.putExtra("name", name);

    setResult(RESULT_OK, i);
    super.finish(); //This kills the current activity.
}
你应该做:

public void finish() {

        String name;
        name = editText_Data.getText().toString();

        Intent i = new Intent(Third.this, MainActivity.class);
         Bundle bundle = new Bundle();
         bundle.putString("name", name);

        startActivityForResult(i, RESULT_OK, bundle); 
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent i) {

    if((requestCode == 1) &&(resultCode == RESULT_OK)) {
        Bundle bundle = i.getExtras();
        String name = bundle.getString("name");
        textViewInformation.setText(name);
    }
}
当您调用
finish
时,它只会终止当前活动。如果要返回到第一个活动,只需为第一个活动启动一个新的活动,并在
包中传递数据


如果希望更多地了解堆栈概念,可以使用
片段

将其转到第二个活动的原因如下:

 button_SendData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            finish();
        }
    });

 public void finish() {

    String name;
    name = editText_Data.getText().toString();

    Intent i = new Intent(Third.this, MainActivity.class);
    i.putExtra("name", name);

    setResult(RESULT_OK, i);
    super.finish(); //This kills the current activity.
}
你应该做:

public void finish() {

        String name;
        name = editText_Data.getText().toString();

        Intent i = new Intent(Third.this, MainActivity.class);
         Bundle bundle = new Bundle();
         bundle.putString("name", name);

        startActivityForResult(i, RESULT_OK, bundle); 
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent i) {

    if((requestCode == 1) &&(resultCode == RESULT_OK)) {
        Bundle bundle = i.getExtras();
        String name = bundle.getString("name");
        textViewInformation.setText(name);
    }
}
当您调用
finish
时,它只会终止当前活动。如果要返回到第一个活动,只需为第一个活动启动一个新的活动,并在
包中传递数据


如果您想拥有更多的堆栈概念,可以使用
片段

只需删除finish();就这样

只需去除表面处理();就这样

我按照你的指示做了,不同的是我要回到第一个活动,所以肯定会更好。但是很遗憾,TextView中没有显示任何信息,就好像没有向第一个活动发送任何信息一样。是否调试了应用程序?我会检查以确保您正在进入ActivityResult()
。如果是,请检查您的响应代码,以确保您的条件语句中的预期数据正常工作。@UnknownBoy我更新了我的答案,它不完整。对不起,我应该在哪里接收数据?它仍然可以是onActivityResult方法吗?因为我按照你的建议做了所有的事情,但是我仍然觉得这个方法没有被调用。除非我试图以不适当的方式接收此数据。你能给我一个提示,当我收到数据时应该怎么做?因为我尝试了所有方法,但什么都没有……您仍然可以通过
onActivityResult
方法收到它。我再次更新了我的答案。我添加了
onActivityResult
方法。我按照您的指示进行了操作,不同之处在于我将返回到第一个活动,因此它肯定会更好。但是很遗憾,TextView中没有显示任何信息,就好像没有向第一个活动发送任何信息一样。是否调试了应用程序?我会检查以确保您正在进入ActivityResult()
。如果是,请检查您的响应代码,以确保您的条件语句中的预期数据正常工作。@UnknownBoy我更新了我的答案,它不完整。对不起,我应该在哪里接收数据?它仍然可以是onActivityResult方法吗?因为我按照你的建议做了所有的事情,但是我仍然觉得这个方法没有被调用。除非我试图以不适当的方式接收此数据。你能给我一个提示,当我收到数据时应该怎么做?因为我尝试了所有方法,但什么都没有……您仍然可以通过
onActivityResult
方法收到它。我再次更新了我的答案。我添加了
onActivityResult
方法。