Как использовать AsyncTask в другом процессе? - PullRequest
0 голосов
/ 01 января 2019

Я использую Службу в другом процессе моего приложения, используя android:process=":MyService", и я понял, что мои AsyncTasks в классе MyService не работают и не выполняются, так как я могу синхронизировать свои данные с моим Сервером в классе MyService?

Я просто хочу обновить свой Сервер из этого класса, потому что это ForegroundService, который должен быть активен большую часть времени.Я считаю, что определение класса MyService как отдельного процесса помогает расходовать заряд батареи моего приложения.Я уже определил внутренний класс и использовал его внутри класса MyService, но он вообще не работает, я также попытался использовать другой пользовательский класс asyncTask в классе MyService, но он не работает либо

пример моего кода в классе MyService:

    static class UpdatePoint extends AsyncTask<String,String,String>{

    @Override
    protected String doInBackground(String... strings) {

        String userId = user.get(SessionManager.getKeyId()).toString();
        String coin = strings[1];
        String step = strings[2];

        String log_lat = strings[3];
        String log_lng = strings[4];
        String log_zone = strings[5];
        String log_address = strings[6];
        //Log.d("updatePoint","coin:"+coin+", step:"+step);
        try {
            String update_point_url = "http://mohregroup.ir/db-mapapa/updatePoint.php";
            URL url = new URL(update_point_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

            httpURLConnection.setConnectTimeout(5*1000);

            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            String data = URLEncoder.encode("userId", "UTF-8") + "=" + URLEncoder.encode(userId, "UTF-8")
                    + "&" + URLEncoder.encode("coin", "UTF-8") + "=" + URLEncoder.encode(coin, "UTF-8")
                    + "&" + URLEncoder.encode("step", "UTF-8") + "=" + URLEncoder.encode(step, "UTF-8")
                    + "&" + URLEncoder.encode("log_lat", "UTF-8") + "=" + URLEncoder.encode(log_lat, "UTF-8")
                    + "&" + URLEncoder.encode("log_lng", "UTF-8") + "=" + URLEncoder.encode(log_lng, "UTF-8")
                    + "&" + URLEncoder.encode("log_zone", "UTF-8") + "=" + URLEncoder.encode(log_zone, "UTF-8")
                    + "&" + URLEncoder.encode("log_address", "UTF-8") + "=" + URLEncoder.encode(log_address, "UTF-8");
            bufferedWriter.write(data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();

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

            StringBuilder response = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                response.append(line);
            }
            //Log.d("updatePoints response:", response.toString().trim());
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();

            Timber.d("done Successfully!");

            return response.toString();

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

        return null;
    }

и использование его внутри другого метода класса MyService:

if (getAddress() != null) {
            if (getAddress().getFeatureName() == null && 
getAddress().getAddressLine(0) != null) {
                new UpdatePoint().execute(String.valueOf(coins), 
String.valueOf(steps),
                        String.valueOf(originLocation.getLatitude()), 
String.valueOf(originLocation.getLongitude()),
                        getAddress().getFeatureName(), "not titled");
            } else if (getAddress().getFeatureName() != null && 
getAddress().getAddressLine(0) == null) {
                new UpdatePoint().execute(String.valueOf(coins), 
String.valueOf(steps),
                        String.valueOf(originLocation.getLatitude()), 
String.valueOf(originLocation.getLongitude()),
                    "not titled", getAddress().getAddressLine(0));
        } else {
            new UpdatePoint().execute(String.valueOf(coins), String.valueOf(steps),
                    String.valueOf(originLocation.getLatitude()), String.valueOf(originLocation.getLongitude()),
                    getAddress().getFeatureName(), getAddress().getAddressLine(0));
        }
    } else {
        new UpdatePoint().execute(String.valueOf(coins), String.valueOf(steps),
                String.valueOf(originLocation.getLatitude()), String.valueOf(originLocation.getLongitude()),
                "not titled", "not titled");
    }

Итак, любые идеи о

как использовать asyncTask в службе с другим процессом?

или

любым другим способом, чтобы обновить сервер из службы с другим процессом?

любая помощь будет принята с благодарностью!

Спасибо.

1 Ответ

0 голосов
/ 01 января 2019

Одним из способов может быть использование таймера, а когда таймер закончится, вы можете вызвать asynctask и снова сбросить таймер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...