簡體   English   中英

如何延遲進程直到AsyncTask完成?

[英]How to delay processes until and AsyncTask finishes?

我遇到了一個問題,其中正在創建對象並將其發送到后端(PARSE),且變量為“ null”,因為另一個AsyncTask尚未完成。

在當前情況下,我檢索位置的坐標,然后通過and接口將它們從AsyncTask傳遞回Fragment。 在此接口方法中,我正在將經度和緯度值分配給全局變量。

這些newSportEvent.saveInBackground(); 似乎是在從AsyncTask給_longitude / _latitude變量賦值之前調用的。 我可以將.saveInBackground()封裝在if語句中,但這仍然給我帶來一個問題,該問題涉及兩次按下“接受”按鈕以完成所有操作。

如何延遲不創建對象並將其發送到數據庫的過程,直到設置了值?

    case R.id.btnAccept:
        String desc = etDesc.getText().toString().trim();
        String loc = etLocation.getText().toString().trim();
        String time = btnTime.getText().toString().trim();
        String date = btnDate.getText().toString().trim();
        String sport = tvSportName.getText().toString().trim();
        String title = etTitle.getText().toString().trim();
        ParseUser currentUser = ParseUser.getCurrentUser();

        // check to see if the values are empty

        SportEvent newSportEvent = new SportEvent();
        newSportEvent.setSport(sport);
        newSportEvent.setTime(title);
        newSportEvent.setDate(date);
        newSportEvent.setTitle(title);
        newSportEvent.setDesc(desc);
        newSportEvent.setUser(currentUser);
        Log.e("LONGITUDE11111", "" + _longitude);
        Log.e("LATITUDE111111", "" + _latitude);
        //newSportEvent.setLatitude(_latitude);
        //newSportEvent.setLongitude(_longitude);

        // getLatLongFromAddress(loc);
        new LocationAsyncTask(this).execute(loc);

        // implement user signin first>>>

        // newSportEvent.setUser(ParseUser.getCurrentUser());
        ParseACL acl = new ParseACL();
        acl.setPublicReadAccess(true);
        acl.setPublicWriteAccess(true); // objects created are writable
        newSportEvent.setACL(acl);

        // create dialog

        if (!(_longitude == null) || !(_latitude == null)) {
            // publish to ParseDB
            Log.e("LONGITUDE11111", "" + _longitude);
            Log.e("LATITUDE111111", "" + _latitude);
            newSportEvent.setLatitude(_latitude);
            newSportEvent.setLongitude(_longitude);
            newSportEvent.saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                    // Update the display
                    changeFragment();
                    // progressDialog.dismiss();
                }
            });
        }

        break;

    case R.id.btnCancel:
        changeFragment();
        break;
    }

}

private void showNavigationActivity() {
    Log.e("BUTTON", "SIGN UP PRESSED");
    Intent intent = new Intent(getActivity(), NaviActivity.class);
    startActivity(intent);
}

@Override
public void getLocation(ArrayList<String> string_array) {
    // TO-DO Auto-generated method stub
    _longitude = string_array.get(0);
    Log.e("LONGITUDE", _longitude);
    _latitude = string_array.get(1);
    Log.e("LATITUDE", _latitude);
}

newSportEvent.saveInBackground()和相關代碼移至AsyncTaskonPostExecute()方法。 這將確保僅在AsyncTask完成后才能執行此代碼。

暫無
暫無

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

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