Как отправить файл с помощью асинхронной задачи вместе со строками?
Начинающий здесь.
Я пытаюсь отправить данные на страницу 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 ответ
Я думаю, что сделать вашу жизнь проще с использованием сторонних для сетей.
Модификация сделает это намного проще и удобнее для вас в этой ситуации.