Фоновая задача для нескольких операций - Android

Я вставляю несколько полей в MySQL DB, используя PHP как веб-сервис, Android Studio 2.1.2, тестирую на физическом устройстве (Android 4.4.2). У меня есть фоновая задача для взаимодействия с БД. Я не хочу, чтобы следующая активность отображалась до тех пор, пока не будут выполнены все записи в БД. Есть ли какой-то код для использования в onPostExucte() или, возможно, где-нибудь еще, который откроет Activity ТОЛЬКО после вставки информации. Я использую следующий код в onPostExecute():

    Intent intent = new Intent(ctx, Dashboard.class  );
    ctx.startActivity(intent);

Но он переходит к другому действию, а затем через несколько секунд открывает следующее действие.

Второй вопрос, который я имею, - это перенос изображения вместе со всей другой информацией в БД. У меня есть URI, полученный при получении изображения с устройства. Теперь из моего исследования я знаю, что этот URI должен быть превращен в растровое изображение, которое, в свою очередь, должно стать Base64, я прав? можно просто отправить URI как есть? Я пытаюсь использовать фоновую задачу БД для форматирования URI, я пытался использовать другую фоновую задачу, но я, должно быть, сделал что-то не так.

Я пытаюсь вставить без изображения на данный момент, и я получаю ошибку ArrayIndexOutOfBoundsException, она указывает на строку в фоновой задаче, где у меня есть один из параметров для отправки в БД. Есть ли ограничение на количество параметров, которые можно установить?

Фоновое задание:

package name;
import statements;

public class BackgroundTask extends AsyncTask<String, Void, String> {
//Constructor needed to pass info into the BackgroundTask
Context ctx;
BackgroundTask(Context ctx){
    this.ctx = ctx;
}


@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected String doInBackground(String... params) {
    //from this method pass info into MySQL DB
    String reg_url = "http://ipaddress/folder/phpscript.php";
    String method = params[0];
    if (method.equals("register")){
        String fname = params[1];
        String lname = params[2];
        String age = params[3];
        String mobnum = params[4];
        String homenum = params[5];
        String email = params[6];
        String city = params[7];
        String country = params[8];
        String gender = params[9];
        String dob = params[10];

        try {
            URL url = new URL(reg_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream OS = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS,"UTF-8"));

            String data = URLEncoder.encode("user","UTF-8")+"="+URLEncoder.encode(fname,"UTF-8")+"&"+
                    URLEncoder.encode("lname","UTF-8")+"="+URLEncoder.encode(lname,"UTF-8")+"&"+
                    URLEncoder.encode("age","UTF-8")+"="+URLEncoder.encode(age,"UTF-8")+"&"+
                    URLEncoder.encode("mobnum","UTF-8")+"="+URLEncoder.encode(mobnum,"UTF-8")+"&"+
                    URLEncoder.encode("homenum","UTF-8")+"="+URLEncoder.encode(homenum,"UTF-8")+"&"+
                    URLEncoder.encode("email","UTF-8")+"="+URLEncoder.encode(email,"UTF-8")+"&"+
                    URLEncoder.encode("city","UTF-8")+"="+URLEncoder.encode(city,"UTF-8")+"&"+
                    URLEncoder.encode("country","UTF-8")+"="+URLEncoder.encode(country,"UTF-8")+"&"+
                    URLEncoder.encode("gender","UTF-8")+"="+URLEncoder.encode(gender,"UTF-8")+"&"+
                    URLEncoder.encode("dob","UTF-8")+"="+URLEncoder.encode(dob,"UTF-8");

            bufferedWriter.write(data);
            bufferedWriter.flush();
            bufferedWriter.close();
            OS.close();
            InputStream IS = httpURLConnection.getInputStream();
            IS.close();
            return "Registration success...";

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
    return null;
}

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

@Override
protected void onPostExecute(String result) {
    Intent intent = new Intent(ctx, Dashboard.class  );
    ctx.startActivity(intent);

}
}

Активность с использованием фоновой задачи (кнопка вызывает android:onClick для вызова метода):

public void userReg(View view){
//initialise variables by retreiving user input
    fname = ET_fname.getText().toString();
    lname = ET_lname.getText().toString();
    mobnum = ET_mobnum.getText().toString();
    homenum = ET_homenum.getText().toString();
    email =ET_email.getText().toString();
    city = ET_city.getText().toString();
    country = ET_country.getText().toString();
    gender = ET_gender.getText().toString();

    //pass info into the BackgroundTask
    String method ="register";
    BackgroundTask backgroundTask = new BackgroundTask(this);
    backgroundTask.execute(method, fname, lname, String.valueOf(age), mobnum, homenum, email, city, country, gender, dob);
    finish();
}

В основном я хочу иметь возможность вставлять информацию и изображение в БД.

PHP веб-сервис:

<?php

require "init.php";

$fname=$_POST["user"];
$lname=$_POST["lname"];
$age=$_POST["age"];
$mobnum=$_POST["mobnum"];
$hnum=$_POST["homenum"];
$email=$_POST["email"];
$city=$_POST["city"];
$country=$_POST["country"];
$gender=$_POST["gender"];
$dob=$_POST["dob"];

$sql_query="insert into teacher_information values('$fname','$lname','$age','$mobnum','$hnum','$email','$city','$country','$gender', '$dob');";

?>

1 ответ

Во-первых, вы можете вызвать деятельность в методе onPostExecute(), Отправить предыдущий контекст с помощью конструктора. Затем используйте следующий код в методе:

Intent intent = new Intent(cotenxt, NextActivity.class);
context.startActivity(intent);

Во-вторых, обратитесь к этому ответу, чтобы загрузить изображение в сервис php.

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