排队图像路径以供以后上传

时间:2013-11-04 14:56:57

标签: android file-upload arraylist android-asynctask queue

我很难跟踪队列并在以后上传它们。 上传图片是一个asynctask,在postexecute中,邮件将用于发送上传的图片。

这是我的UploadImage AsyncTask。我认为我做得太难了,而且比现在更容易完成。

private class UploadImageTask extends AsyncTask<Void, Void, Integer> {
    ProgressDialog dialog;

    /**
     * Private integer which counts how many times we've tried to upload the
     * Image.
     */
    private int _counter = 0;

    private List<String> imageUploadList = new ArrayList<String>();

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        if(AppStatus.haveNetworkConnection(_context)){
            if(isPhotoTaken()){
                dialog = new ProgressDialog(Step4.this);
                dialog.setCancelable(false);
                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                dialog.setMessage(getString(R.string.uploadingMessage));
                dialog.setTitle(getString(R.string.uploadingTitle));
                dialog.show();
            }
        }
    }

    protected Integer doInBackground(Void... params) {
        init();
        postData();
        return null;
    }
    public void init(){
        _counter = 0;
        _beenHere = true;
        for(String path : imageUploadList){
            Debug.out("Path: "+path);
        }
    }
    public void postData() {
        if (isPhotoTaken()) {
            if(AppStatus.haveNetworkConnection(_context)){
                if(_beenHere){
                    ImageUploader.uploadFile(getPhotoPath(),
                            "http://obo.nl/android-upload-image.php", Step4.this);
                } else {
                    for(String path : imageUploadList){
                        Debug.out(path);
                        ImageUploader.uploadFile(path,
                                "http://obo.nl/android-upload-image.php", Step4.this);
                    }
                }
            } else {
                if (_counter == 0) {
                    _counter++;
                    _activity.runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(_context,
                                    getString(R.string.noInternetImageNotUploaded),
                                    Toast.LENGTH_LONG).show();
                        }
                    });
                    imageUploadList.add(getPhotoPath());
                }
                try {
                    if(_beenHere){
                        _beenHere = false;
                        goToNextIntent();
                    }
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }               
                postData();
            }
        }
    }

    private void goToNextIntent(){
        Intent intent = new Intent(Step4.this, Step5.class);
        intent.putExtra(EXTRA_MESSAGE, (Serializable) _user);
        intent.putExtra(EXTRA_MESSAGE2, _isRepairable);
        intent.putExtra(EXTRA_MESSAGE3, _injury);
        intent.putExtra(EXTRA_MESSAGE4, _category);
        intent.putExtra(EXTRA_MESSAGE5, _inch);
        intent.putExtra(EXTRA_MESSAGE6, _size);
        startActivity(intent);
    }
    protected void onPostExecute(Integer result) {
        if(isPhotoTaken()){
            if(dialog != null){
                dialog.dismiss();
            }
        }
        mailing(_isRepairable);
        new MyAsyncTask().execute(_mail);
    }
}

该行:

if(AppStatus.haveNetworkConnection(_context))
如果用户具有有效的Internet连接,则

返回布尔值true。否则就是假的。

我想要的是将所有图像路径(以及之后发送的邮件)排队到所需的ArrayList中,这样我就可以在用户具有正常工作的互联网连接时将它们全部发送出去。请帮帮我!

1 个答案:

答案 0 :(得分:2)

您可以将图像路径存储在列表(或类似的东西)中并保留列表,例如在共享首选项中。完成上传图片后,您将从该列表中删除它并继续下一个图片,依此类推,直到您的列表为空。

上传时,如果互联网连接中断,它不会影响您,您将始终保留仍要上传的图片列表。

注册广播接收器以收听Wi-Fi连接,当它连接时,它可以自动继续上传 - 这只是一个建议。