将数据从一个活动传递到另一个活动,而不是在第二个活动中显示
我目前正在尝试通过REST API调用获取数据,parsing它以获取我需要的信息,然后将这些信息传递给新的活动。 我使用来自loopj.com的asynchronousHTTP客户端作为REST客户端,然后分别使用下面的代码为我的onClick
和onCreate
当前和未来的活动。
Eclipse不会为我的任何代码传递任何错误,但是当我尝试在模拟器中运行时,当新的活动/视图打开时,我什么也得不到(即空白的白色屏幕)。 我试图在我的REST客户端中使用不同的URL进行编码,但是我什么都看不到。 我甚至通过注释掉onClick
的try / catch和更改bundle.putString("VENUE_NAME", venueName);
将API调用从等式中bundle.putString("VENUE_NAME", venueName);
去searchTerm
。 尽pipe如此,新的观点,但没有显示。 什么是没有通过,或者我忘记做第二个活动显示venueName
?
public void onClick(View view) { Intent i = new Intent(this, ResultsView.class); EditText editText = (EditText) findViewById(R.id.edit_message); String searchTerm = editText.getText().toString(); //call the getFactualResults method try { getFactualResults(searchTerm); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } //Create the bundle Bundle bundle = new Bundle(); //Add your data from getFactualResults method to bundle bundle.putString("VENUE_NAME", venueName); //Add the bundle to the intent i.putExtras(bundle); //Fire the second activity startActivity(i); }
第二个活动中应该接收意图和捆绑并显示的方法:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Get the message from the intent //Intent intent = getIntent(); //String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); //Get the bundle Bundle bundle = getIntent().getExtras(); //Extract the data… String venName = bundle.getString(MainActivity.VENUE_NAME); //Create the text view TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(venName); //set the text view as the activity layout setContentView(textView); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getActionBar().setDisplayHomeAsUpEnabled(true); } }
谢谢你的帮助。 非常感谢。
两种方式可以发送数据。 这是你现在如何发送它。 而且没有错。
//Create the bundle Bundle bundle = new Bundle(); //Add your data from getFactualResults method to bundle bundle.putString("VENUE_NAME", venueName); //Add the bundle to the intent i.putExtras(bundle); startActivity(i);
然而,在你的代码(第二个Activity)中,你将Bundle中的key
作为MainActivity.VENUE_NAME
引用,但代码中没有任何内容表明你有一个返回值作为与Bundle一起发送的实际key
名。 将第二个Activity中的代码更改为:
Bundle bundle = getIntent().getExtras(); //Extract the data… String venName = bundle.getString("VENUE_NAME"); //Create the text view TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(venName);
你可以检查你的第二个活动,如果Bundle包含使用这个密钥,你就会知道该key
不存在于Bundle中。 上面的更正,然而,会让它为你工作。
if (bundle.containsKey(MainActivity.VENUE_NAME)) { .... }
我想如果你replace
String venName = bundle.getString(MainActivity.VENUE_NAME);
同
String venName = bundle.getString("VENUE_NAME");
它应该工作。
以下是我如何处理从一个活动到另一个活动的数据传输:
将数据发送到名为“Projectviewoptions”的活动:
Bundle b = new Bundle(); b.putString("id", str_projectid); Projectviewoptions pv = new Projectviewoptions();
接收数据:
idbundle = getArguments(); String myid = idbundle.getString("id");
双方的“关键”应该是一致的; 在这种情况下是“id”。
另一种通过意图发送数据的方式是:
发送:
Intent intent = new Intent(getActivity(),ViewProjectDetails.class); intent.putExtra("id", myid); startActivity(intent);
收到:
String id = getIntent().getExtras().getString("id");
你错误地访问了你已经添加的密钥。 除了以MainActivity.VENUE_NAME
获取string之外,还尝试直接传递您在捆绑软件中添加的密钥名称,如下所示:
除了得到string如下:
//Get the bundle Bundle bundle = getIntent().getExtras(); //Extract the data… String venName = bundle.getString(MainActivity.VENUE_NAME);
尝试使用密钥名称获取string,如下所示:
/Get the bundle Bundle bundle = getIntent().getExtras(); //Extract the data… String venName = bundle.getString("VENUE_NAME");
发送捆绑。
Bundle bundle = new Bundle(); bundle.putString("Name",Object); //This is for a String i.setClass(CurrentClass.this, Class.class); i.putExtras(bundle); startActivity(i);
接收捆绑
Bundle bundle = null; bundle = this.getIntent().getExtras(); String myString = bundle.getString("Name");//this is for String
确保你用来作为把项目放到你的Bundle中的关键字的string与用来提取它的关键字相同。 就你而言,也许MainActivity.VENUE_NAME
与“VENUE_NAME”不一样
Intent loginIntent = new Intent(LoginActivity.this,HomeActivity.class);
Bundle bundle = new Bundle();
bundle.putString(“user_id”,userId);
i.putExtras(束);
startActivity(loginIntent);
LoginActivity.this.finish();