我有singlePlaceActivity类,我想将OnpostExecute中的名称,地址等字符串数据传递给另一个电子邮件活动。我的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();
}
}
答案 0 :(得分:1)
尝试使用bundle传递和接收数据,
Intent intent = new Intent(first.this, second.class);
Bundle bundle = new Bundle();
bundle.putInt("index", index);
intent.putExtras(bundle);
startActivity(intent);
接收数据:
Bundle b = getIntent().getExtras();
int index = b.getInt("index");
答案 1 :(得分:0)
如果您使用AsyncTask
,则onPostExecute(...)中不需要任何background thread
。因此,删除onPostExecute(...)
内的线程,如果您在onPostExecute(..)中发送的值不为null,则将解决您的问题。
AsyncTask可以正确,轻松地使用UI线程。这个班 允许执行后台操作并在UI上发布结果 线程,而不必操纵线程和/或处理程序。
试用onPostExecute(String response)
代替你的代码
protected void onPostExecute(String response) {
// dismiss the dialog after getting all products
pDialog.dismiss();
/**
* 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);
}
}
答案 2 :(得分:0)
我花了几个星期来解决这个问题。您似乎应该注意该值存储在“sender”活动中的数据类型。由于我有不同的活动开始我的“接收器”活动,我添加了这个if语句来处理两种数据类型(考虑someId是长数据类型)。
someId = getIntent().getLongExtra(EXTRA_ID,0);
if (someId < 1){
someId = Long.parseLong(getIntent().getStringExtra(EXTRA_ID));
}
不幸的是我无法解释为什么,也许一些大师可以启发我们普通的民众...