因为我知道这方面我的大多数问题都是使用搜索来回答的。但这似乎是一个特殊的。
我是Google Android开发的新手,所以我想通过实践来学习。我想创建一个应用程序,它扫描条形码并显示可能的产品列表。我正在使用ZXing(从这里得到这个!;))来扫描barcdes。工作完美。我正在用扫描的条形码查询谷歌购物api并解析rss feed,因为有结果(但在大多数情况下有^^)。
这一切都很棒。但是我扫描应用程序后需要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的查询需要花费很多时间。我希望你理解我的问题,你可以帮助我!我知道,必须有一个Interface Runnable实现并且方法run(),但我不知道我必须将代码的哪一部分分离到上面的存档。请帮帮我!
祝你好运, 巴斯蒂
(请原谅我英语不好,我来自德国)
答案 0 :(得分:0)
您应该在创建AndroidFeedParser时从线开始新的异步任务...但是您的应用可能已经完成了吗? ;)