Страница 1 из 1

как правильно парсить

Добавлено: 19 авг 2015, 17:23
SmerT
привет всем!

только только начал изучать написать проги на платформе андроид. сразу начал писать нужную мне приложение ))
смотрел на видео уроки до 30 тем. Мне надо сначала написать авторизацию пользователя. Создал поля, получил данные. Теперь надо было отправить http запрос на сервер чтобы проверить логин пароль. Пользовался классом HttpUtility. На первый взгляд все было ясно, но когда начал запустить прогу вылетела ошибка android.os.NetworkOnMainThreadException. Искал и нашел что это из-за того что я вызвал Http запрос в main activity.
Нашел решение:

первое которое помогло но почему-то не советуют данное решение:

Код: Выделить всё

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}
собственно и первый вопрос об этом, почему Http запрос в main activity не "разрешают" писать и вызывает ошибку? и почему данное решение строго не советуется?

----------
пока искал ответ на этого вопроса продолжил работу вторым методом.

Код: Выделить всё

new Thread(new Runnable() {
                    public void run() {

                        String response = "Empty";
                        response  = API.userInfo(5);//get user info width usid=5
                        Log.d("aaaa", "dd:" + response);
                    }
}).start();
все работает. но проблема в читабельности и качества кода. Хочу более менее писать качественный код. Не уверен что для каждой функции класса API правильно каждый раз вызвать функцию внутри

Код: Выделить всё

new Thread(new Runnable() {
                    public void run() {

                        String response = "Empty";
                        response  = API.userInfo(5);//get user info width usid=5
                        Log.d("aaaa", "dd:" + response);
                    }
}).start();
--------
нашел ещё один метод: AsyncTask.
но этот вообще хуже, в этом случае я должен был написать такой огромный код для каждого вызова функции парсера с сайта:

Код: Выделить всё

  class MyTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
      super.onPreExecute();
       Log.d("aaaa", "loading");
    }

    @Override
    protected Void doInBackground(Void... params) {

//здесь вызов функции парсера
      return null;
    }

    @Override
    protected void onPostExecute(Void result) {
      super.onPostExecute(result);
      Log.d("aaaa", "end");
    }
  }

вообщем запутался и решил спросить. Каким образом правильно парсить с сайта?

Re: как правильно парсить

Добавлено: 19 авг 2015, 18:53
doter.ua
Один асинктаск может обработать все твои запросы, принимая на вход нужный адрес(запрос), и возвращая ответ в исходном виде - поток\массив байт.

Re: как правильно парсить

Добавлено: 19 авг 2015, 19:19
SmerT
doter.ua писал(а):Один асинктаск может обработать все твои запросы, принимая на вход нужный адрес(запрос), и возвращая ответ в исходном виде - поток\массив байт.
можно пример? не улавливал идею (