使用Intent使用putExtra和getExtra方法在第二个活动中接收空数据

时间:2014-09-06 05:25:11

标签: android android-intent

我有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();
    }

}

3 个答案:

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

不幸的是我无法解释为什么,也许一些大师可以启发我们普通的民众...