AsyncTask

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Arman
Сообщения: 31
Зарегистрирован: 13 фев 2016, 07:13

AsyncTask

Сообщение Arman » 19 май 2016, 14:11

Здравствуйте, подскажите есть код AsyncTask хотел его использовать для получения данных с разных таблиц, но он инсёртит не все таблицы, я так понял что не успевает обработать что ли, получается для получения данных с удаленной таблицы нужно создавать для каждой таблице AsynTask. Или я не так что то понял

в params[0] - хранится название таблицы, также называется и файл на хостинге
таблицы на удаленном и в приложении имею одинаковые названия

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

private class ParseAppTable extends AsyncTask<String, Void, String>
    {

        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;
        String resultJson = "";
        JSONObject dataJsonObj = null;
        ContentValues cv = new ContentValues();

        @Override
        protected String doInBackground(String... params)
        {
            // получаем данные с внешнего ресурса
            try
            {
                parse_tbl = params[0];
                URL url = new URL(HOST_URL+parse_tbl+".php");

                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                InputStream inputStream = urlConnection.getInputStream();
                StringBuffer buffer = new StringBuffer();

                reader = new BufferedReader(new InputStreamReader(inputStream));

                String line;
                while ((line = reader.readLine()) != null)
                {
                    buffer.append(line);
                }

                resultJson = buffer.toString();

            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return resultJson;
        }  //doInBackground

        @Override
        protected void onPostExecute(String strJson)
        {
            super.onPostExecute(strJson);
            if (strJson != "")
            { 
               //  здесь хотел делать что-то типа
              // if (parse_tbl == "название таблицы")  то такой-то код если другой таблице то другой код

                try
                {
                    dataJsonObj = new JSONObject(strJson);
                    JSONArray data = dataJsonObj.getJSONArray("data");

                    //  перебираем и выводим контакты каждого друга
                    for (int i = 0; i < data.length(); i++)
                    {
                        JSONObject row = data.getJSONObject(i);

                        String app_id = row.getString("app_id");
                        String version = row.getString("version");
                        String copyright = row.getString("copyright");

                        // подготовим данные для вставки в виде пар: наименование столбца - значение
                        cv.put("app_id", app_id);
                        cv.put("version", version);
                        cv.put("copyright", copyright);
                        // вставляем запись и получаем ее ID
                        long rowID = db.insert(parse_tbl , null, cv);
                    }
                    Log.d(LOG_TAG,"--- import zrk_app  ---");
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }

            }

        }  // end onPostExecute
    }
но если пишу через if и использую для все запросов к удаленным таблицам то не все обрабатываются, пропускают что ли. А если для каждой таблице название AsyncTask меняю то все обрабатывает. Пример:
new ParseTable1.execute("my_table1");
new ParseTable2.execute("my_table2");
Как можно использовать один и тот же код, чтобы для каждой таблицы не создавать свой поток

Ответить