簡體   English   中英

在片段內部的AsyncTask中獲取EditText值

[英]Get EditText value in AsyncTask inside fragment

我有一個片段,其中包含用戶地址的EditText字段。 我正在嘗試通過AsyncTask將它們發送到我的Web服務器,但還沒有弄清楚如何獲取這些值。 它工作正常,沒有碎片。 我試圖刪除所有不必要的代碼。 謝謝。

public class FragmentProfileMain extends Fragment implements OnClickListener {

    EditText email2, email3, mail1, mail2, cityET, stateET, zipET;

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.profile_fragment_main, container,
            false);

    email1 = (TextView) view.findViewById(R.id.profileEmail1);
    email2 = (EditText) view.findViewById(R.id.profileEmail2);
    email3 = (EditText) view.findViewById(R.id.profileEmail3);
    mail1 = (EditText) view.findViewById(R.id.profileAddress1);
    mail2 = (EditText) view.findViewById(R.id.profileAddress2);
    cityET = (EditText) view.findViewById(R.id.profileCity);
    stateET = (EditText) view.findViewById(R.id.profileState);
    zipET = (EditText) view.findViewById(R.id.profileZip);

return view;
}

class saveInfo extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        // Check for success tag
        int success;

        try {
            // Building Parameters
            String secondemail = ((EditText) this.email2).getText().toString();
            String thirdemail = ((EditText) this.email3).getText().toString();
            String secaddress = ((EditText) this.mail1).getText().toString();
            String secaddresstwo = ((EditText) this.mail2).getText().toString();
            String secCity = ((EditText) this.cityET).getText().toString();
            String secState = ((EditText) this.stateET).getText().toString();
            String secZip = ((EditText) this.zipET).getText().toString();

        }
    }

您應該將edittext值作為參數傳遞給AsyncTask

您應該避免將視圖傳遞給asynctask,以防在asynctask仍在運行時碎片或活動被破壞。 通過盡可能多地分離邏輯,這也使asynctask更易於測試。

public void startSaveInfo(){

    String firstEmail = email1.getText().toString();
    String secondEmail = email2.getText().toString();
    String thirdEmail = email3.getText().toString();
    String secaddress = mail1.getText().toString();
    String secaddresstwo = mail2.getText().toString();
    String secCity = cityEt.getText().toString();
    String secState = stateEt.getText().toString();
    String secZip = zipEt.getText().toString();

    new saveInfo().execute(secondemail,thirdEmail,secaddress,secaddresstwo,secCity,secState,secZip)

}

class saveInfo extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... args) {
            // Building Parameters
            String secondemail = args[0];
            String thirdemail = args[1];
            String secaddress = args[2];
            String secaddresstwo = args[3];
            String secCity = args[4];
            String secState = args[5];
            String secZip = args[6];

            //do your work

    }

}

當您在saveInfo類中引用this.email2等時, thissaveInfo類的引用,該類不具有您在Fragment中實例化的EditText對象的概念。

訪問實例變量的一種方法是創建一個saveInfo構造函數,然后從片段saveInfo其發送給您的view對象。

在您的片段中,或者在您調用saveInfo任務的任何位置:

SaveInfo saveInfo = new SaveInfo(view) // 'saveInfo' should be capitalised

saveInfo

...
View view;    
public SaveInfo (View view) {
    this.view = view;
}

@Override
protected String doInBackground(String... args) {
    // TODO Auto-generated method stub
    // Check for success tag
    int success;

    try {
        // Building Parameters
        String secondemail = view.email2.getText().toString();
....

暫無
暫無

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

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