2011-01-24 109 views
1

我只是想从另一个活动意图返回字符串,但没有在父活动中获取该字符串......虽然没有显示错误。 测试的目的只是想显示在结果回敬酒的短信..onActivityResult没有得到结果

这里是父活动的代码....

public class Login2 extends Activity { 
    static final int REQ_CODE=0; 
/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     Button startButton=(Button) findViewById(R.id.btn_login); 
     startButton.setOnClickListener(new View.OnClickListener() 
     { 
     public void onClick(View view) 
     {   
      final TextView var=(TextView)findViewById(R.id.errmsg); 

      EditText usrnameobj = (EditText)findViewById(R.id.et_usename); 
      EditText usrpassobj = (EditText)findViewById(R.id.et_password); 
      String username = usrnameobj.getText().toString(); 
      String password = usrpassobj.getText().toString(); 

      Intent i=new Intent(getApplicationContext(),AndroidXmlResource.class); 
      i.putExtra("entry",username.toString() + password.toString()); 
      startActivityForResult(i,REQ_CODE); 
     } 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) 

      { 

      //if (resultCode == Activity.RESULT_OK && requestCode == 0) 
      { 

         //String res = data.getExtras().getString("result"); 
        // TextView var=(TextView)findViewById(R.id.errmsg); 
        // var.setVisibility(0); 
        // var.setText(res.toString()); 
        // var.setText("called on act res"); 

         Toast.makeText(Login2.this,"Hi! Bright Hub", Toast.LENGTH_SHORT).show(); 
        } 
      } 
     }); 

而这里的返回结果的子活动....

public class AndroidXmlResource extends Activity { 

//public String U="sudeep1"; 
//public String P="donotlock1"; 
public int Res; 
@Override 
protected void onCreate(Bundle bundle) { 
    // TODO Auto-generated method stub 
    super.onCreate(bundle); 
    //setContentView(R.layout.main); 
    Bundle extras = getIntent().getExtras(); 
    if (extras == null) { 
    return; 
    } 
    String pass=extras.getString("entry"); 
    //String result= new String(); 
     //TextView myXmlContent = (TextView)findViewById(R.id.tv_test); 

    try { 
    String stringXmlContent = getEventsFromAnXML(this); 
    //myXmlContent.setText(pass.toString()); 
    Intent returnIntent = new Intent(); 
    if(stringXmlContent.equals(pass)) 
    { 

    returnIntent.putExtra("result","valid Login"); 
    setResult(RESULT_OK,returnIntent); 
     super.finish(); 

    } 
    else 
    { 
    returnIntent.putExtra("result","Invalid Login"); 
     setResult(RESULT_OK,returnIntent); 
     super.finish(); 

    } 


    } catch (XmlPullParserException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 

    private String getEventsFromAnXML(Activity activity) 
    throws XmlPullParserException, IOException 
    { 

    StringBuffer stringBuffer = new StringBuffer(); 
    Resources res = activity.getResources(); 
    XmlResourceParser xpp = res.getXml(R.xml.myxml); 
    xpp.next(); 
    int eventType = xpp.getEventType(); 
    while (eventType != XmlPullParser.END_DOCUMENT) 
    { 
     int c=1; 
     if(eventType == XmlPullParser.START_DOCUMENT) 
     { 
     //stringBuffer.append("--- Start XML ---"); 
     } 
     else if(eventType == XmlPullParser.START_TAG) 
     { 
     //stringBuffer.append("\nSTART_TAG: "+xpp.getName()); 

     } 
     else if(eventType == XmlPullParser.END_TAG) 
     { 
     //stringBuffer.append("\nEND_TAG: "+xpp.getName()); 
     } 
     else if(eventType == XmlPullParser.TEXT) 
     { 
     //stringBuffer.append("\nTEXT: "+xpp.getText()); 
     //extra 

     { String t=xpp.getText().toString(); 

     stringBuffer.append(t.toString());  

     }  
     } 

     eventType = xpp.next(); 
    } 
    //stringBuffer.append("\n--- End XML ---"); 
    return stringBuffer.toString(); 
+0

请以您可以阅读的方式格式化代码...:/ – Beasly 2011-01-24 13:30:41

+0

感谢格式@Cristian! – 2011-01-24 13:35:16

回答

1
在你的父活动

,你应该这样做:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

if (resultCode == Activity.RESULT_OK && requestCode == REQ_CODE) 
    { 

    String res = data.getExtras().getString("result"); 
    Toast.makeText(Login2.this,"Hi! Bright Hub: "+res, Toast.LENGTH_SHORT).show(); 
    } 
} 

你正在使用的是哪一个。

super.finish()是做什么用的? 为什么不是this.finish() ??

1

您能否把@Override onActivityResult()和另一个放在setResult(Activity.RESULT_OK,intent)

请确保这在儿童活动。

1

确保您还没有加入这一行android:launchMode="singleInstance|singleTask"menifest.xml,你声明了activty。如果你已经添加,删除此用于获取关于onActivityResult()结果。

2

请确保您没有元素的android:noHistory =“true”属性。

0

我有一个类似的问题,我发现的解决方案是通过将结果存储到共享首选项中并在稍后将其加载到onResume中来替换startActivityForResult功能。检查完整的讨论here