June 22, 2019

Приложение для обновления аккаунта на сервере

Приложение для обновления аккаунта очень примитивно. При открытии приложения мы видим информацию об устройстве и поле ввода, в которое необходимо ввести логин состоящий из цифр.

После ввода аккаунта и нажатия кнопки "обновить" приложение подключается к серверу, и обновляет баланс аккаунта.

Внутренности приложения

Сорцы приложения доступны по ссылке

Вся логика приложения находится в одном классе MainActivity

Приложение подключается к серверу отличному от того, что используется на сайте:

public final String PROFILE_SRV_URL = "http://35.242.200.42/profile/update_profile.php";

Основной пласт логики находится в AsyncTask

private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        private ProgressDialog dlg;
        private HttpAsyncTask() {
        }
        /* synthetic */ HttpAsyncTask(MainActivity x0, Object x1) {
            this();
        }
        /* Access modifiers changed, original: protected|varargs */
        public String doInBackground(String... urls) {
            return MainActivity.this.postData(urls[0]);
        }
        /* Access modifiers changed, original: protected */
        public void onPreExecute() {
            this.dlg = ProgressDialog.show(MainActivity.this, "Пожалуйста, подождите", "Выполняется активация аккаунта..");
        }
        /* Access modifiers changed, original: protected */
        public void onPostExecute(String response) {
            if (this.dlg != null) {
                this.dlg.dismiss();
            }
            MainActivity.this.updateBtn.setEnabled(true);
            String errorCode;
            try {
                JSONObject jObject = new JSONObject(response);
                errorCode = jObject.getString("error_code");
                if (errorCode.equals("LOGIN_NOT_FOUND")) {
                    MainActivity.this.alert("Ошибка", "Пользователь с таким логином не найден! Убедитесь, что Вы верно ввели свой логин.");
                } else if (errorCode.equals("SERVER_ERROR")) {
                    MainActivity.this.alert("Ошибка сервера", jObject.getString("error_message"));
                } else if (errorCode.equals("SUCCESS")) {
                    MainActivity.this.alert("Учетная запись обновлена", "Поздравляем! Ваша учетная запись успешно обновлена.\nТеперь Вы можете закрыть это приложение и начать работать через сайт.");
                }
            } catch (Exception e) {
                errorCode = "Ошибка ответа от сервера. Повторите запрос позже.";
                e.printStackTrace();
                if (MainActivity.this.isDebuggable) {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.append(errorCode);
                    stringBuilder.append("\n\n");
                    stringBuilder.append(response);
                    errorCode = stringBuilder.toString();
                }
                MainActivity.this.alert("Ошибка", errorCode);
            }
        }
    }

Выполняется метод postData(), в зависимости от кода ответа, выполняется определенное действие.

if (errorCode.equals("LOGIN_NOT_FOUND")) {
                    MainActivity.this.alert("Ошибка", "Пользователь с таким логином не найден! Убедитесь, что Вы верно ввели свой логин.");
                } else if (errorCode.equals("SERVER_ERROR")) {
                    MainActivity.this.alert("Ошибка сервера", jObject.getString("error_message"));
                } else if (errorCode.equals("SUCCESS")) {
                    MainActivity.this.alert("Учетная запись обновлена", "Поздравляем! Ваша учетная запись успешно обновлена.\nТеперь Вы можете закрыть это приложение и начать работать через сайт.");

Сам метод postData()

public String postData(String login) {
        HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 7000);
        HttpConnectionParams.setSoTimeout(httpParams, 7000);
        HttpClient httpclient = new DefaultHttpClient(httpParams);
        getClass();
        HttpPost httppost = new HttpPost(PROFILE_SRV_URL);
        try {
            List<NameValuePair> nameValuePairs = new ArrayList(6);
            nameValuePairs.add(new BasicNameValuePair("login", login));
            nameValuePairs.add(new BasicNameValuePair("imei", getIMEI()));
            nameValuePairs.add(new BasicNameValuePair("mac", getMAC()));
            nameValuePairs.add(new BasicNameValuePair("model", getModel()));
            nameValuePairs.add(new BasicNameValuePair("serial", getSerial()));
            nameValuePairs.add(new BasicNameValuePair("android", getAndroid()));
            nameValuePairs.add(new BasicNameValuePair("phone", getPhoneNumber()));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpclient.execute(httppost).getEntity().getContent()));
            StringBuilder stringBuilder = new StringBuilder();
            while (true) {
                String readLine = bufferedReader.readLine();
                if (readLine == null) {
                    return stringBuilder.toString();
                }
                stringBuilder.append(readLine);
            }
        } catch (Exception e) {
            Log.e("HelloWorld", Log.getStackTraceString(e));
            return e.getMessage();
        }
    }

Это метод принимает входящим параметром строку с логином. Далее к логину приплюсовываются данные, которые мы видели над полем логина (IMEI + MAC + модель устройства + серийник + Android + номер телефона)