将数据从一个活动发送到另一个活动的问题

时间:2011-06-24 18:08:11

标签: android android-activity

解决: 我解决了这个问题。感谢Ted指向我在结果代码返回0的正确方向。然后我意识到当主Activity再次被调用时。它取消了结果。所以我检查了我的清单文件,并启用了单实例....


我花了很长时间坚持这个问题。用Google搜索答案。但我似乎无法到达任何地方。我是Android的新手,并且在Stack溢出时发布新内容,如果我搞砸了格式化,那就很抱歉。

好的,我有一个主要活动的应用程序。在这个活动上,我有一个登录按钮。 当用户单击登录按钮时,它会在新的活动(登录活动)中打开,该活动基本上允许用户登录。所有这一切都在运作和测试。但我的问题是,当用户登录时,我想将他的名字,姓氏和用户ID传递给主要活动。为了尝试在两个活动之间传递数据,我尝试遵循http://developer.android.com/resources/faq/commontasks.html#opennewscreen(在屏幕上返回结果的标题下面。

好的,所以这里是我如何做到这一点的代码: 主要活动代码:

logIn = (Button)this.findViewById(R.id.LogInButton);
     logIn.setVisibility(View.INVISIBLE);
     logIn.setOnClickListener(new OnClickListener() 
     {
         @Override
         public void onClick(View v) 
         {
             Intent loginIntent = new Intent(Main.this, Login.class);
             startActivityForResult(loginIntent, LOGIN_CODE);
         }
     });


     @Override 
 public void onActivityResult(int requestCode, int resultCode, Intent data) {     
   super.onActivityResult(requestCode, resultCode, data); 
   switch(requestCode) { 
     case (LOGIN_CODE) : { 
       if (resultCode == Activity.RESULT_OK) {
           this.setLogin(data);
       } 
       break; 
     } 
   } 
 }

以下是登录活动的代码:

  /**
  * Login to user.
  */
 private void loginCheck()
 {
     firstName = firstNameET.getText().toString();
     lastName = lastNameET.getText().toString();
     patientID = patientIDET.getText().toString();
     password = passwordET.getText().toString();

     boolean loginCorrect = management.isLoginCorrect(patientID, firstName, lastName, password);
     if(loginCorrect == true)
     {
         //Pass login data to main(QOLMeasurment) activity and bring us back to that activity.
         Intent intent = new Intent(Login.this, QOLMeasurement.class);
         Bundle bundle = new Bundle();

         bundle.putString("firstName", firstName);
         bundle.putString("lastName", lastName);
         bundle.putString("patientID", patientID);
         intent.putExtras(bundle);

         setResult(Activity.RESULT_OK, intent);

         Log.d("TEST", "TEST!");
         Login.this.finish();
         Log.d("TEST", "TEST:(");

     }
     else
     {
         Toast.makeText(this, "Login Failed.", Toast.LENGTH_LONG).show();
     }

 }

所以我的问题是我似乎无法将数据恢复到主要活动。试图在这里排除故障是我的难点。根据我的理解,方法startActivityForResult()将开始侦听结果,结果将由onActivityResult()方法处理;所以在我的登录活动中我使用setResult(),然后关闭将resultCode传递给onActivityResult()的Activity,我是否正确理解这个?

如果是这样,那么当我调用Login.this.finish()时,问题就出现了;它似乎没有完成活动,因此resultCode永远不会更新。有帮助吗?我真的陷入了困境。  谢谢你的时间!!! 波比

1 个答案:

答案 0 :(得分:0)

在您的登录活动代码中,替换:

Intent intent = new Intent(Login.this, Main.class);

Intent intent = new Intent();