Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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
Android 如何从两个不同的活动中检索数据并在另一个不同的活动中显示_Android_Android Intent - Fatal编程技术网

Android 如何从两个不同的活动中检索数据并在另一个不同的活动中显示

Android 如何从两个不同的活动中检索数据并在另一个不同的活动中显示,android,android-intent,Android,Android Intent,我如何从两个不同的活动(比如:A和B)检索数据,我想在另一个活动(活动C)中展示。也许我可以这样画-A和B包含的数据应该用C表示。就像这样简单 但问题是当我从A接收数据后,我从B接收数据(这次我也从B接收数据)。来自的数据丢失或类似于“重置”。当我从B接收数据并从A获取数据时,也存在此问题。 我正在使用以下代码: 活动A:这是我使用Intent发送数据的方式 public static final String EXTRA_COUNTRY_SITE = "EXTRA_COUNTRY_SITE";

我如何从两个不同的活动(比如:A和B)检索数据,我想在另一个活动(活动C)中展示。也许我可以这样画-A和B包含的数据应该用C表示。就像这样简单

但问题是当我从A接收数据后,我从B接收数据(这次我也从B接收数据)。来自的数据丢失或类似于“重置”。当我从B接收数据并从A获取数据时,也存在此问题。

我正在使用以下代码:

活动A:这是我使用Intent发送数据的方式

public static final String EXTRA_COUNTRY_SITE = "EXTRA_COUNTRY_SITE";
private static final int REQUEST_RESPONSE_SITE = 1;

class ItemLists implements AdapterView.OnItemClickListener{

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        TextView tvs = (TextView)view.findViewById(R.id.textViewSiteName);
     // Lets say textview just like String "Data A"
        Intent intent = new Intent(view.getContext(), LoginActivityView.class);
        intent.putExtra(EXTRA_COUNTRY_SITE, tvs.getText().toString());
     // tvs.getText().toString() here you can change it to String
        startActivityForResult(intent, REQUEST_RESPONSE_SITE);
    }
}
public static final String EXTRA_COUNTRY_EMPLOYEE = "EXTRA_COUNTRY_EMPLOYEE";
private static final int REQUEST_RESPONSE_EMPLOYEE = 1;

class ItemListe implements AdapterView.OnItemClickListener{

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        TextView tve = (TextView)view.findViewById(R.id.textViewEmpName);
     // Lets say textview just like String "Data B"
        Intent intent = new Intent(view.getContext(), LoginActivityView.class);
        intent.putExtra(EXTRA_COUNTRY_EMPLOYEE, tve.getText().toString());
     // tvs.getText().toString() here you can change it to String
        startActivityForResult(intent, REQUEST_RESPONSE_EMPLOYEE);
    }
}
这就是我从活动C到活动A和B的过程

    public void click(View v) {
    Intent intent = null;
    switch(v.getId()) {
        case R.id.editTextSite:
            intent = new Intent(this, ViewSiteActivity.class);
            break;
        case R.id.editTextEmployee:
            intent = new Intent(this, ViewEmployeeActivity.class);
    }
    startActivity(intent);
}

任何解决该问题的想法或其他传递数据的技巧。抱歉我的英语不好,我只是Android的初学者。

如果C只从B接收,B只从A接收,那么将从A接收的包添加到B中的C

Activity B
...
intent.putExtras(receivingBundle):
...
如果要从A或B开始活动C,
C只从开始的活动接收数据。

我理解为,您希望将数据从A传递到B,然后将A和B的数据传递到C。如果是这样,您必须将A和B的数据从B发送到C。但您只发送B数据,正如我看到的代码

在您的B活动单击事件中尝试此操作

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    TextView tve = (TextView)view.findViewById(R.id.textViewEmpName);
 // Lets say textview just like String "Data B"
    Intent intent = new Intent(view.getContext(), LoginActivityView.class);
    intent.putExtra(EXTRA_COUNTRY_EMPLOYEE, tve.getText().toString());
    intent.putExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE, getIntent().getStringExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE));
 // tvs.getText().toString() here you can change it to String
    startActivityForResult(intent, REQUEST_RESPONSE_EMPLOYEE);
}
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
TextView tve=(TextView)view.findViewById(R.id.textViewEmpName);
//让我们说textview就像字符串“数据B”
Intent Intent=newintent(view.getContext(),LoginActivityView.class);
intent.putExtra(EXTRA_COUNTRY_EMPLOYEE,tve.getText().toString());
intent.putExtra(ViewEmployeeActivity.EXTRA\u COUNTRY\u EMPLOYEE,getIntent().getStringExtra(ViewEmployeeActivity.EXTRA\u COUNTRY\u EMPLOYEE));
//tvs.getText().toString()在这里您可以将其更改为字符串
startActivityForResult(意图、请求、响应、员工);
}

如果我对您的问题理解错误,请纠正我。

您可以使用共享首选项存储数据,并在以后使用它们, 下面是一个例子

将数据存储在共享首选项中

1) 在活动A中

SharedPreferences sharedpreferences;
sharedpreferences = getSharedPreferences("myPref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString(EXTRA_COUNTRY_SITE,tvs.getText().toString());
            editor.commit();
2) 在活动B中

SharedPreferences sharedpreferences;
sharedpreferences = getSharedPreferences("myPref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString(EXTRA_COUNTRY_EMPLOYEE,tvs.getText().toString());
            editor.commit();
3) 在活动C中使用它们

SharedPreferences prefs = this.getSharedPreferences("myPref", Context.MODE_PRIVATE);
String countrySite = prefs.getString(EXTRA_COUNTRY_SITE, null);
String countryEmp = prefs.getString(EXTRA_COUNTRY_EMPLOYEE, null); 

使用意图传递数据是跨活动共享数据的好方法。你的确切工作流程是什么?如果您从
A->B->C
开始,那么您需要按此顺序通过意图传递数据。我的工作流程是A&B->C只是这样没有A&B。。。在Android中,您可以从一个活动跳到另一个活动。只需使用意图跨活动传递所需的数据,但活动C仍然必须从这两个活动中获取数据。如果不是这样,它必须是这样的C->A->C->B或C->B->C->A。当C->A->C(我有数据A)但当我启动C->B(我携带数据B)时,我回到C,在这里我的数据A被还原。如果B有数据,我的意思是我想同时接收a和B的数据,而不是a或B的数据。然后传入活动C…然后为A和B活动维护两个公共静态字符串,并在各自活动中的onclick事件之后将数据设置为字符串。然后您可以从C活动访问A和B字符串。只需在B活动的onclick事件中添加此行,这将解决您的需求,我猜是intent.putExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE,getIntent().getStringExtra(ViewEmployeeActivity.EXTRA_COUNTRY_EMPLOYEE));这并不能解决我的问题,当我从A获取数据并从B获取数据返回C时,我的文本中没有任何内容。我首先从C启动活动,然后启动活动A或B。这里是我的工作流,如果仍然混淆或我混淆,请解释它。来自A&B->C的数据。谢谢,伙计,太棒了,解决我的问题。我希望我能对你的答案投赞成票D XD
SharedPreferences prefs = this.getSharedPreferences("myPref", Context.MODE_PRIVATE);
String countrySite = prefs.getString(EXTRA_COUNTRY_SITE, null);
String countryEmp = prefs.getString(EXTRA_COUNTRY_EMPLOYEE, null);