2013-08-29 39 views
1

我已尝试{}将字符串确认设置为“已确认付款”。我想setDescription()给String确认。我如何将这个String从void onActivityResult传递给公共类EndpointsTask?在Android中传递字符串void public

@Override 
protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK) { 
     PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION); 
     if (confirm != null) { 
      try { 
       Log.i("paymentExample", confirm.toJSONObject().toString(4)); 

       String confirmation = "payment confirmed"; 







      } catch (JSONException e) { 
       Log.e("paymentExample", "an extremely unlikely failure occurred: ", e); 
      } 
     } 
    } 
    else if (resultCode == Activity.RESULT_CANCELED) { 
     Log.i("paymentExample", "The user canceled."); 
    } 
    else if (resultCode == PaymentActivity.RESULT_PAYMENT_INVALID) { 
     Log.i("paymentExample", "An invalid payment was submitted. Please see the docs."); 
    } 
} 


public class EndpointsTask extends AsyncTask<Context, Integer, Long> { 
    protected Long doInBackground(Context... contexts) { 

     Contactinfoendpoint.Builder endpointBuilder = new Contactinfoendpoint.Builder(
      AndroidHttp.newCompatibleTransport(), 
      new JacksonFactory(), 
      new HttpRequestInitializer() { 
      public void initialize(HttpRequest httpRequest) { } 
      }); 
    Contactinfoendpoint endpoint = CloudEndpointUtils.updateBuilder(
    endpointBuilder).build(); 





    try { 




     ContactInfo note = new ContactInfo().setDescription(confirmation); 
     String noteID = new Date().toString(); 
     note.setId(noteID); 

     EditText streetName; 
     streetName = (EditText) findViewById (R.id.streetAddress); 
     String streetInfo = streetName.getText().toString(); 
     note.setStreetAddress(streetInfo); 

     EditText firstNameText; 
     firstNameText = (EditText) findViewById (R.id.firstName); 
     String firstNameInfo = firstNameText.getText().toString(); 
     note.setNameFirst(firstNameInfo); 

     EditText lastNameText; 
     lastNameText = (EditText) findViewById (R.id.lastName); 
     String lastNameInfo = lastNameText.getText().toString(); 
     note.setNameLast(lastNameInfo); 

     EditText emailText; 
     emailText = (EditText) findViewById (R.id.textemail); 
     String emailInfo = emailText.getText().toString(); 
     note.setEmailAddress(emailInfo); 

     EditText zipText; 
     zipText = (EditText) findViewById (R.id.zipCode); 
     String zipInfo = zipText.getText().toString(); 
     note.setZipCode(zipInfo); 

     EditText stateText; 
     stateText = (EditText) findViewById (R.id.state); 
     String stateInfo = stateText.getText().toString(); 
     note.setState(stateInfo); 

     EditText phoneText; 
     phoneText = (EditText) findViewById (R.id.phoneNumber); 
     String phoneInfo = phoneText.getText().toString(); 
     note.setPhone(phoneInfo); 





     ContactInfo result = endpoint.insertContactInfo(note).execute(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
     return (long) 0; 
    } 
} 

EDITED CODE,现在为什么每次按下按钮时我的数据存储视图中都会出现两个条目。

@Override 
protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK) { 
     PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION); 
     if (confirm != null) { 
      try { 
       Log.i("paymentExample", confirm.toJSONObject().toString(4)); 

       String confirmation = "payment confirmed"; 

       EndpointsTask task = new EndpointsTask(confirmation); 
       task.execute(this); 



       // TODO: send 'confirm' to your server for verification. 
       // see https://developer.paypal.com/webapps/developer/docs/integration/mobile/verify-mobile-payment/ 
       // for more details. 

      } catch (JSONException e) { 
       Log.e("paymentExample", "an extremely unlikely failure occurred: ", e); 
      } 
     } 
    } 
    else if (resultCode == Activity.RESULT_CANCELED) { 
     Log.i("paymentExample", "The user canceled."); 
    } 
    else if (resultCode == PaymentActivity.RESULT_PAYMENT_INVALID) { 
     Log.i("paymentExample", "An invalid payment was submitted. Please see the docs."); 
    } 
} 


public class EndpointsTask extends AsyncTask<Context, Integer, Long> { 

    String confirmation; 
    public EndpointsTask(String confirmation) { 
    this.confirmation = confirmation; 
    } 


    protected Long doInBackground(Context... contexts) { 

     Contactinfoendpoint.Builder endpointBuilder = new Contactinfoendpoint.Builder(
      AndroidHttp.newCompatibleTransport(), 
      new JacksonFactory(), 
      new HttpRequestInitializer() { 
      public void initialize(HttpRequest httpRequest) { } 
      }); 
    Contactinfoendpoint endpoint = CloudEndpointUtils.updateBuilder(
    endpointBuilder).build(); 





    try { 




     ContactInfo note = new ContactInfo().setDescription(confirmation); 
     String noteID = new Date().toString(); 
     note.setId(noteID); 

     EditText streetName; 
     streetName = (EditText) findViewById (R.id.streetAddress); 
     String streetInfo = streetName.getText().toString(); 
     note.setStreetAddress(streetInfo); 

     EditText firstNameText; 
     firstNameText = (EditText) findViewById (R.id.firstName); 
     String firstNameInfo = firstNameText.getText().toString(); 
     note.setNameFirst(firstNameInfo); 

     EditText lastNameText; 
     lastNameText = (EditText) findViewById (R.id.lastName); 
     String lastNameInfo = lastNameText.getText().toString(); 
     note.setNameLast(lastNameInfo); 

     EditText emailText; 
     emailText = (EditText) findViewById (R.id.textemail); 
     String emailInfo = emailText.getText().toString(); 
     note.setEmailAddress(emailInfo); 

     EditText zipText; 
     zipText = (EditText) findViewById (R.id.zipCode); 
     String zipInfo = zipText.getText().toString(); 
     note.setZipCode(zipInfo); 

     EditText stateText; 
     stateText = (EditText) findViewById (R.id.state); 
     String stateInfo = stateText.getText().toString(); 
     note.setState(stateInfo); 

     EditText phoneText; 
     phoneText = (EditText) findViewById (R.id.phoneNumber); 
     String phoneInfo = phoneText.getText().toString(); 
     note.setPhone(phoneInfo); 





     ContactInfo result = endpoint.insertContactInfo(note).execute(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
     return (long) 0; 
    } 
} 

@Override 
public void onDestroy() { 
    stopService(new Intent(this, PayPalService.class)); 
    super.onDestroy(); 
} 

}

+0

是否有一个原因为什么你将一组Context传递给doInBackground方法? – Darussian

回答

3

你必须创建EndpointsTask的AsyncTask内部构造像这样:

public class EndpointsTask extends AsyncTask<Context, Integer, Long> { 

    String confirmation; 
    public RouteAsyncRunnerUI(String confirmation) { 
    this.confirmation = confirmation; 
    } 
} 

所以,你可以调用EndpointsTask内现场确认的确认,做你喜欢它。

您调用此构造在onActivityResult类,像这样:

EndpointsTask task = new EndpointsTask(confirmation); 
task.execute(this); 
+0

感谢您的答案,这样做可以传递我的字符串。我现在似乎在我的应用引擎控制台中注册了两个条目,而不是一个条目。我得到一个contactinfo和“确认付款”,我得到一个与“null”和contactinfo。有任何想法吗? – johnsonjp34

+0

@ coconuts4eva,我猜你只需要contactinfo和支付确认条目?您是否在传递/使用确认字符串之前尝试检查null? – linus

+0

我似乎已经在onClick中执行了。我摆脱了这一点,它效果很好。谢谢! – johnsonjp34

1

我不明白了一个道理,为什么你逝去的语境中的一个数组中的AsyncTask类doInBackground方法。为了传递一个串入的AsyncTask可以使类具有参数化类型

public class EndpointsTask extends AsyncTask<String, Integer, Long> 

,你可以执行使用

new EndpointsTask().execute("any", "amount", "of", "strings); 

这里是更多的文档的任务AsyncTasks