2011-01-24 105 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