2
votes

I have singlePlaceActivity class from which I want to pass string data like name ,address which I got in OnpostExecute to another Email activity. My singlePlace activity succesfully starts the email activity but I didn't receive putExtra string data in Email activity using getextra method and my string data name,address,phone don't have null values as I verified from 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);
                    }


                }
            });

        }

    }

}

And this is my second receiving activity that is Email activity 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

3 Answers

1
votes

Try bundle to pass and receive data,

Intent intent = new Intent(first.this, second.class);

Bundle bundle = new Bundle();
bundle.putInt("index", index);    
intent.putExtras(bundle);
startActivity(intent); 

Receive data:

Bundle b = getIntent().getExtras();
int index = b.getInt("index");
0
votes

If you use AsyncTask there is no need of any background thread inside onPostExecute(...). So, remove the thread inside onPostExecute(...) your problem will be solved if those values you are sending not null in onPostExecute(..).

AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.

Try this code for onPostExecute(String response) instead of yours

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);
        }

    }
0
votes

I spent weeks on this problem. It seems that you should take note of what data type the value is stored as in the "sender" activity. As I have different activities which starts my "receiver" activity, I added this if statement to handle both data types (considering someId is a Long Data Type).

    someId = getIntent().getLongExtra(EXTRA_ID,0);
    if (someId < 1){
        someId = Long.parseLong(getIntent().getStringExtra(EXTRA_ID));
    }

Unfortunately I can not explain why, maybe some Guru can enlighten us common folk...