Сканирование штрих-кодов (ZXing) в собственном потоке и отображение ProgessDialog - PullRequest
1 голос
/ 29 августа 2011

, так как я знаю эту сторону, большинство моих вопросов получили ответы, используя поискНо это кажется особенным.

Я новичок в разработке Google Android, поэтому хочу учиться на практике.Я хочу создать приложение, которое сканирует штрих-коды и отображает список возможных продуктов.Я использую ZXing (получил это отсюда!;)) Для сканирования штрих-кодов.Работает отлично.Я запрашиваю API покупок Google с отсканированным штрих-кодом и анализирую RSS-канал, так как результат есть (но в большинстве случаев это ^^).

Все это прекрасно работает.Но это занимает до четырех секунд после того, как я сканирую, приложение возвращается к моей активностиЭто кажется очень длинным, не так ли?Поэтому я решил переместить сканирующую часть в один поток, и при запросе результата из API должен быть ProgressDialog для пользователя, который знает, что там происходит.

Вот мой код:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {  
      switch (requestCode) {
      case IntentIntegrator.REQUEST_CODE:
         if (resultCode == Activity.RESULT_OK) {

            IntentResult intentResult = 
               IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

            if (intentResult != null) {
               String scannedCode = intentResult.getContents();
               String format = intentResult.getFormatName();

               //Gets information to the scanned product by the
               //Google-Shopping-API in form of a rss feed.
               AndroidFeedParser afp = new AndroidFeedParser("https://www.googleapis.com/shopping/search/v1/public/products?key=" +
                    AndroidFeedParser.API_KEY + "&country=DE&q=" + scannedCode + "&alt=" + AndroidFeedParser.FEED_CODE);

               //Parses the given rss feed and gives a FeedItem-List
               List<FeedItem> item = afp.parse();
               Toast toast = null;

               if(item.size() < 1) 
                   //products is NOT listed within the Google-Shopping-API
                   toast = Toast.makeText(this, "Dieses Produkt ist nicht in der Datenbank.", Toast.LENGTH_LONG);
                else 
                   //product is listed within the Google-Shopping-API
                   toast = Toast.makeText(this, item.get(1).getPrice().toString(), Toast.LENGTH_LONG);
               toast.show();
               Log.d("SEARCH_EAN", "OK, EAN: " + scannedCode + ", FORMAT: " + format);
            } else {
               Log.e("SEARCH_EAN", "IntentResult je NULL!");
            }
         } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.e("SEARCH_EAN", "CANCEL");
         }
      } }

Я же говорил, это работает потрясающе.Но это занимает много времени, я думаю, запрос к API стоит столько времени.Я надеюсь, что вы понимаете мой вопрос, и вы можете мне помочь!Я знаю, что должен быть реализован интерфейс Runnable и метод run (), но я не знаю, какую часть кода я должен разделить, чтобы архивировать, что пожелает выше.Пожалуйста, помогите мне!

С наилучшими пожеланиями, Басти

(Простите за мой плохой английский, я из Германии)

1 Ответ

0 голосов
/ 30 января 2012

При создании AndroidFeedParser вы должны начинать новую асинхронную задачу с линии ... но, возможно, ваше приложение уже выполнено?;)

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