簡體   English   中英

使用Intent在第二個活動中使用putExtra和getExtra方法接收空數據

[英]Using Intent receiving null data in second activity using putExtra and getExtra methods

我有singlePlaceActivity類, 我想從該類中將在OnpostExecute中獲得的字符串數據(如名稱,地址)傳遞給另一個Email活動 我的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();
    }

}

嘗試捆綁發送和接收數據,

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

如果使用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);
        }

    }

我花了幾個星期解決這個問題。 似乎您應該注意“發送者”活動中存儲值的數據類型。 由於我有不同的活動來啟動“接收器”活動,因此我添加了此if語句來處理兩種數據類型(考慮someId為長數據類型)。

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

不幸的是,我無法解釋為什么,也許某些大師可以啟發我們普通的民間...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM