Как отправить файл с помощью асинхронной задачи вместе со строками?

Начинающий здесь.

Я пытаюсь отправить данные на страницу PHP с Android с помощью asyncTask. Работать только со строками - это нормально, но я не знаю, как отправить файл со строками, используя AsyncTask.

Вот мой класс AsyncTask

public class BackGroundWorker extends AsyncTask<String ,File,String >{

private AlertDialog.Builder alertDialog;

private Context context;

public BackGroundWorker(Context context) {
    this.context = context;
}

@Override
protected String doInBackground(String ... params) {
    String type = params[0];
    if (type.equals(Utils.TYPE_SIGN_UP)){
        try {
            URL url = new URL(Utils.URL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);

            OutputStream outputStream = connection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));

            String post_data = URLEncoder.encode(Utils.KEY_NAME, "UTF-8")+"="+URLEncoder.encode(params[1], "UTF-8")+"&"+
                    URLEncoder.encode(Utils.KEY_EMAIL, "UTF-8")+"="+URLEncoder.encode(params[2], "UTF-8")+"&"+
                    URLEncoder.encode(Utils.KEY_PHONE, "UTF-8")+"="+URLEncoder.encode(params[3], "UTF-8")+"&"+
                    URLEncoder.encode(Utils.KEY_PASSWORD, "UTF-8")+"="+URLEncoder.encode(params[4], "UTF-8");

            bufferedWriter.write(post_data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();

            InputStream inputStream = connection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));

            String result = "";
            String line = "";

            while ((line = bufferedReader.readLine()) != null){
                result += line;
            }

            bufferedReader.close();
            inputStream.close();
            connection.disconnect();

            return result;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}

@Override
protected void onPreExecute() {
    alertDialog = new AlertDialog.Builder(context);
    alertDialog.create();
    alertDialog.setTitle("Registration Status");
}

@Override
protected void onPostExecute(String  aVoid) {
    alertDialog.setMessage(aVoid);
    alertDialog.setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
    alertDialog.show();
}

@Override
protected void onProgressUpdate(File ... values) {
    super.onProgressUpdate(values);
}

И я звоню из MainActivity.java

worker = new BackGroundWorker(context);
                    worker.execute(Utils.TYPE_SIGN_UP, name, email, phone, password);

Как реализовать это таким образом, чтобы обрабатывать строки и файл одновременно? Потому что, когда я пытаюсь отправить файл сюда:

worker.execute(Utils.TYPE_SIGN_UP, name, email, phone, password, image_file);

Я получаю ошибку.

1 ответ

Я думаю, что сделать вашу жизнь проще с использованием сторонних для сетей.

Модификация сделает это намного проще и удобнее для вас в этой ситуации.

Другие вопросы по тегам