Home Articles

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

Asked
Viewed 1355 times
0

我有一个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 Answers

  • 1

    尝试捆绑传递和接收数据,

    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");
    
  • 0

    如果您使用AsyncTask,则不需要任何background thread inside onPostExecute(...) . 所以,删除 onPostExecute(...) 里面的线程你的问题将会解决 if those values you are sending not null in onPostExecute(..) .

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

    我花了几个星期来解决这个问题您似乎应该注意该值存储在“sender”活动中的数据类型 . 由于我有不同的活动开始我的“接收器”活动,我添加了这个if语句来处理两种数据类型(考虑someId是长数据类型) .

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

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

Related