将数据从一个活动传递到另一个活动,而不是在第二个活动中显示

我目前正在尝试通过REST API调用获取数据,parsing它以获取我需要的信息,然后将这些信息传递给新的活动。 我使用来自loopj.com的asynchronousHTTP客户端作为REST客户端,然后分别使用下面的代码为我的onClickonCreate当前和未来的活动。

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();