我有一个singlePlaceActivity类,其中我在OnpostExecute中获得了 I want to pass string data like name ,address 到另一个 Email activity . 我的singlePlace活动成功启动了电子邮件活动,但我没有在使用getextra方法的电子邮件活动中收到putExtra string data
,而我的字符串数据名称,地址,电话没有我从logcat验证的空值 .
SinglePlaceActivity:
package info.androidhive.slidingmenu;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.widget.TextView;
public class SinglePlaceActivity extends Activity {
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;
// Alert Dialog Manager
AlertDialogManager alert = new AlertDialogManager();
// Google Places
GooglePlaces googlePlaces;
// Place Details
PlaceDetails placeDetails;
// Progress dialog
ProgressDialog pDialog;
// KEY Strings
// public static String KEY_REFERENCE = "reference"; // id of the place
public static String reference_value = "reference";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.single_place);
Intent i = getIntent();
// Place referece id
String reference = i.getStringExtra(reference_value);
// Calling a Async Background thread
new LoadSinglePlaceDetails().execute(reference);
}
/**
* Background Async Task to Load Google places
* */
class LoadSinglePlaceDetails extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(SinglePlaceActivity.this);
pDialog.setMessage("Passing Restaurent details to Email ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting Profile JSON
* */
protected String doInBackground(String... args) {
String reference = args[0];
// creating Places class object
googlePlaces = new GooglePlaces();
// Check if used is connected to Internet
try {
placeDetails = googlePlaces.getPlaceDetails(reference);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed Places into LISTVIEW
* */
if(placeDetails != null){
String status = placeDetails.status;
// check place deatils status
// Check for all possible status
if(status.equals("OK")){
if (placeDetails.result != null) {
String name = placeDetails.result.name;
String address = placeDetails.result.formatted_address;
String phone = placeDetails.result.formatted_phone_number;
String latitude = Double.toString(placeDetails.result.geometry.location.lat);
String longitude = Double.toString(placeDetails.result.geometry.location.lng);
Intent in = new Intent(getApplicationContext(),Email.class);
in.putExtra("nameValue",name );
in.putExtra("addValue",address );
in.putExtra("urlValue",phone );
startActivity(in);
Log.d("Place ", name + address + phone + latitude + longitude);
}
}
else if(status.equals("ZERO_RESULTS")){
alert.showAlertDialog(SinglePlaceActivity.this, "Near Places",
"Sorry no place found.",
false);
}
else if(status.equals("UNKNOWN_ERROR"))
{
alert.showAlertDialog(SinglePlaceActivity.this, "Places Error",
"Sorry unknown error occured.",
false);
}
else if(status.equals("OVER_QUERY_LIMIT"))
{
alert.showAlertDialog(SinglePlaceActivity.this, "Places Error",
"Sorry query limit to google places is reached",
false);
}
else if(status.equals("REQUEST_DENIED"))
{
alert.showAlertDialog(SinglePlaceActivity.this, "Places Error",
"Sorry error occured. Request is denied",
false);
}
else if(status.equals("INVALID_REQUEST"))
{
alert.showAlertDialog(SinglePlaceActivity.this, "Places Error",
"Sorry error occured. Invalid Request",
false);
}
else
{
alert.showAlertDialog(SinglePlaceActivity.this, "Places Error",
"Sorry error occured.",
false);
}
}else{
alert.showAlertDialog(SinglePlaceActivity.this, "Places Error",
"Sorry error occured.",
false);
}
}
});
}
}
}
这是我的第二个接收活动,即电子邮件活动Email.java
package info.androidhive.slidingmenu;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Email extends Activity implements View.OnClickListener {
EditText personsEmail, rname, radd, rurl, yourmsg;
String emailAdd, beginning, stupidAction, hatefulAct, address;
Button sendEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.email);
//String beginning = getIntent().getStringExtra("extraname") ;//returns null if nothing
// String address = getIntent().getStringExtra("extraname2");
//String stupidAction = getIntent().getStringExtra("extraname2");
beginning = getIntent().getStringExtra("nameValue");
address = getIntent().getStringExtra("addValue");
stupidAction= getIntent().getStringExtra("urlValue");
// beginning = intent.getStringExtra("nameValue");
//address = intent.getStringExtra("addValue");
// stupidAction = intent.getStringExtra("urlValue");
initializeVars();
sendEmail.setOnClickListener(this);
}
private void initializeVars() {
// TODO Auto-generated method stub
personsEmail = (EditText) findViewById(R.id.etEmails);
rname = (EditText) findViewById(R.id.etIntro);
radd = (EditText) findViewById(R.id.etName);
rurl = (EditText) findViewById(R.id.etThings);
yourmsg = (EditText) findViewById(R.id.etAction);
sendEmail = (Button) findViewById(R.id.bSentEmail);
}
public void onClick(View v) {
// TODO Auto-generated method stub
convertEditTextVarsIntoStringsAndYesThisIsAMethodWeCreated();
String emailaddress[] = { emailAdd };
String message = "Restaurent Name:"+ beginning
+ " Restaurent Address:"+ address
+ "Click for more details:" + stupidAction
+ "Message:" + hatefulAct;
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, emailaddress);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT," Restaurent Recommendation");
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
startActivity(emailIntent);
}
private void convertEditTextVarsIntoStringsAndYesThisIsAMethodWeCreated() {
// TODO Auto-generated method stub
emailAdd = personsEmail.getText().toString();
beginning = rname.getText().toString();
address = radd.getText().toString();
stupidAction = rurl.getText().toString();
hatefulAct = yourmsg.getText().toString();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
finish();
}
}
3 回答
如果您使用AsyncTask,则不需要任何background thread inside onPostExecute(...) . 所以,删除
onPostExecute(...)
里面的线程你的问题将会解决 if those values you are sending not null in onPostExecute(..) .试试
onPostExecute(String response)
而不是你的代码尝试捆绑传递和接收数据,
接收数据:
我花了几个星期来解决这个问题您似乎应该注意该值存储在“sender”活动中的数据类型 . 由于我有不同的活动开始我的“接收器”活动,我添加了这个if语句来处理两种数据类型(考虑someId是长数据类型) .
不幸的是我无法解释为什么,也许一些古鲁可以启发我们普通的民间...