Загрузка файла на сервер в Android-загружает последний

У меня есть таблица Sqlite, которая хранит 3 файла, и когда я хочу прочитать их из таблицы, это работает хорошо, но когда я хочу загрузить на сервер, он просто загружает последний 3 раза. Я не знаю, что не так с моим кодом пожалуйста, дайте мне решение для этой проблемы. оцените спасибо

Вот как я звоню из Activity:

List<MediaFiles> mediaFiles = mfh.getAllFiles();
        for (MediaFiles mf : mediaFiles) {
            filePath = mf.getFile();
            lat = Double.parseDouble(mf.getGeolat());
            longi = Double.parseDouble(mf.getGeolng());
            String log = "Id: " + mf.getId() + " ,File: " + mf.getFile() + " ,latitued: " + mf.getGeolat() + " ,longitued: " + mf.getGeolng();
            Log.d("File Table Row: ", log);
            new UploadFileToServerMain().execute();
        }

А это класс Uploader:

private class UploadFileToServerMain extends AsyncTask<Void, Integer, String> {
    @Override
    protected void onPreExecute() {
        // setting progress bar to zero
        //progressBar.setProgress(0);
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {

    }

    @Override
    protected String doInBackground(Void... params) {
        return uploadFile();
    }

    @SuppressWarnings("deprecation")
    private String uploadFile() {

        String responseString = null;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(global.getURL()+"fileUpload.php");

        try {
            AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                    new AndroidMultiPartEntity.ProgressListener() {

                        @Override
                        public void transferred(long num) {
                            publishProgress((int) ((num / (float) totalSize) * 100));
                        }
                    });

            File sourceFile = new File(filePath);

            // Adding file data to http body
            entity.addPart("latitued", new StringBody(lat+""));
            entity.addPart("longitued", new StringBody(longi+""));
            entity.addPart("image", new FileBody(sourceFile));
            entity.addPart("token",new StringBody(global.getMyToken()));

            totalSize = entity.getContentLength();
            httppost.setEntity(entity);

            // Making server call
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity r_entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                // Server response
                responseString = EntityUtils.toString(r_entity);
            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }

        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }

        return responseString;

    }

    @Override
    protected void onPostExecute(String result) {
        Log.e(TAG, "Response from server: " + result);
        // showing the server response in an alert dialog
        //showAlert(result);
        super.onPostExecute(result);
    }

}

Logcat:Введите описание изображения здесь

1 ответ

  1. Наконец я получил решение (передача параметра в класс AsyncTask.

    List<MediaFiles> mediaFiles = mfh.getAllFiles();
        for (MediaFiles mf : mediaFiles) {
            lat = Double.parseDouble(mf.getGeolat());
            longi = Double.parseDouble(mf.getGeolng());
            String log = "Id: " + mf.getId() + " ,File: " + mf.getFile() + " ,latitued: " + mf.getGeolat() + " ,longitued: " + mf.getGeolng();
            Log.d("File Table Row: ", log);
            new UploadFileToServerMain(mf.getFile()).execute();
        }
    

    Создание класса uploader конструктора

    private class UploadFileToServerMain extends AsyncTask<Void, Integer, String> {
    
    private String path = null;
    public UploadFileToServerMain(String path){
            this.path = path;
    }
    
    @SuppressWarnings("deprecation")
    private String uploadFile() {
    
        String responseString = null;
    
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(global.getURL()+"fileUpload.php");
    
        try {
            AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                    new AndroidMultiPartEntity.ProgressListener() {
    
                        @Override
                        public void transferred(long num) {
                            publishProgress((int) ((num / (float) totalSize) * 100));
                        }
                    });
    
            File sourceFile = new File(path);
    
            // Adding file data to http body
            entity.addPart("latitued", new StringBody(lat+""));
            entity.addPart("longitued", new StringBody(longi+""));
            entity.addPart("image", new FileBody(sourceFile));
            entity.addPart("token",new StringBody(global.getMyToken()));
    
            totalSize = entity.getContentLength();
            httppost.setEntity(entity);
    
            // Making server call
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity r_entity = response.getEntity();
    
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                // Server response
                responseString = EntityUtils.toString(r_entity);
            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }
    
        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }
    
        return responseString;
    
    }
    
    }