2011-08-29 3 views
1

이 부분을 알고 있기 때문에 대부분의 내 질문에 대한 답변이 검색을 사용하고 있습니다. 그러나 이것은 특별한 것으로 보인다.자신의 스레드에서 바코드 스캐닝 (ZXing) 및 ProgessDialog를 표시

Google Android 개발에 익숙하지 않아서 배우고 싶습니다. 바코드를 스캔하고 가능한 제품 목록을 표시하는 앱을 만들고 싶습니다. 나는 ZXing (여기에서 이것을 얻었다!))을 사용하여 barcdes를 검사한다. 완벽하게 작동합니다. 나는 스캔 한 바코드로 google 쇼핑 api를 간청하고 결과가 있기 때문에 rss 피드를 구문 분석합니다 (하지만 대부분의 경우 ^^).

모두 훌륭한 작품입니다. 하지만 앱을 스캔 한 후 최대 4 초가 지나면 내 액티비티로 돌아갑니다. 이것은 매우 긴 것처럼 보입니다, 그렇죠? 그래서 스캐닝 부분을 하나의 스레드로 옮기고 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()이 있어야한다는 것입니다. 그러나 위의 소원을 보관하려면 코드의 어떤 부분을 분리해야하는지 모르겠습니다. 제발 도와주세요!

안부, Basti

당신이 AndroidFeedParser을 만들 때

답변

0

당신은 라인에서 새 비동기 작업을 시작합니다 (내 나쁜 영어에 대한 실례합니다, 나는 독일에서 왔어요) ...하지만 어쩌면 당신을 앱이 이미 완료 되었습니까? ;)

관련 문제