2012-04-06 66 views
13

我正在開發一款應用程序,它使用條形碼在掃描條形碼後獲取物品的產品信息。使用條形碼獲取產品信息如姓名,價格等

我不希望用戶單獨安裝ZXing條形碼應用程序,所以我將ZXing代碼嵌入到我的項目中。所以我能夠獲得條形碼ID號碼。

我想使用谷歌搜索API購物時使用條形碼號碼來獲取名稱,製造商,價格等產品信息。

這裏是我曾經用過

public class JSONExampleActivity extends Activity { 

TextView httpStuff; 
DefaultHttpClient client; 
JSONObject json; 

final static String URL = "https://www.googleapis.com/shopping/search"; 
String upc = "/v1/public/products?country=US&q=691464717759&restrictBy=gtin=691464717759"; 

/** Called when the activity is first created. */ 
@Override 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    httpStuff = (TextView) findViewById(R.id.tvHttp); 
    client = new DefaultHttpClient(); 
    new Read().execute("items"); 


} 

public JSONObject products(String upc) throws ClientProtocolException, IOException, JSONException {  
    StringBuilder url = new StringBuilder(URL); 
    url.append(upc); 
    HttpGet get = new HttpGet(url.toString());  
    HttpResponse r = client.execute(get); 
    int status = r.getStatusLine().getStatusCode(); 

    if (status == 200) { 

     HttpEntity e = r.getEntity();   
     String data = EntityUtils.toString(e);   
     JSONObject timeline = new JSONObject(data); 

     return timeline;  } 
    else {   

     Toast.makeText(JSONExampleActivity.this, "error", Toast.LENGTH_SHORT);   
     return null;  } 
    } 

public class Read extends AsyncTask<String, Integer, String> {  
    @Override  
    protected String doInBackground(String... params) {   
     // TODO Auto-generated method stub   
     try {    

       json = products(upc); 

      return json.getString(params[0]);   
      } catch (ClientProtocolException e) {    
       // TODO Auto-generated catch block    
       e.printStackTrace();   
      } catch (IOException e) {    
       // TODO Auto-generated catch block    
       e.printStackTrace();   
      } catch (JSONException e) {    
       // TODO Auto-generated catch block    
       e.printStackTrace();   
      }   
     return null;  
    } 

@Override 
protected void onPostExecute(String result){  
httpStuff.setText(result); } 


} 

}

的代碼,但我沒有收到在httpStuff任何文本。

這是logcat的:

D/SntpClient(61): request time failed: java.net.SocketException: Address family not supported by protocol 
W/System.err(793): org.apache.http.conn.ConnectTimeoutException: Connect to /209.85.175.95:443 timed out 
W/System.err(793): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) 
W/System.err(793): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143) 
W/System.err(793): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
W/System.err(793): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
W/System.err(793): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 
W/System.err(793): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
W/System.err(793): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
W/System.err(793): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
W/System.err(793): at com.android.example.jsonexample.JSONExampleActivity.products(JSONExampleActivity.java:53) 
W/System.err(793): at com.android.example.jsonexample.JSONExampleActivity$Read.doInBackground(JSONExampleActivity.java:77) 
W/System.err(793): at com.android.example.jsonexample.JSONExampleActivity$Read.doInBackground(JSONExampleActivity.java:1) 
W/System.err(793): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
W/System.err(793): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
W/System.err(793): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
W/System.err(793): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
W/System.err(793): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
W/System.err(793): at java.lang.Thread.run(Thread.java:1019) 
D/SntpClient(61): request time failed: java.net.SocketException: Address family not supported by protocol 

請幫我看看爲什麼我收到錯誤的原因。

+0

項目的信息你得到這方面的任何解決方案?我必須在我的應用程序中爲我們的客戶實現相同的功能。你可以請我解決方案嗎? – Noundla 2015-11-27 12:46:13

回答

1

您想使用the API並按GTIN進行搜索,這是條形碼中編碼的數字所代表的含義。

+0

嗨,我已經使用谷歌「搜索api的購物」和GTIN,因爲你已經指定和更新了我的帖子..請檢查代碼。我無法獲得字符串結果。我發佈了logcat – DSP 2012-04-09 09:45:11

5

嘗試將您的API ID添加到網址。 https://developers.google.com/shopping-search/v1/getting_started#getting-started

我試過了,能夠根據您的代碼的網址獲取Michael Kors MK5412 Chronograph Watches的信息。

https://www.googleapis.com/shopping/search/v1/public/products?country=US&q=691464717759&restrictBy=gtin=691464717759&key= {這裏你的關鍵}

結果,你必須解決您的網址構建器來匹配^。

另外,還要確保你把

<uses-permission android:name="android.permission.INTERNET"/> 

在您的清單。感謝這傢伙:http://androidforums.com/developer-101/100793-java-net-unknownhostexception.html

編碼愉快:)

0

我認爲,「用於表示特定產品的條形碼號碼以及全球唯一的條形碼號碼。大多數條形碼apis從其自己的數據庫中找到給定的條形碼號碼以獲取特定的產品信息(如果給出條形碼號碼存在於他們的數據庫中),否則它不會給出任何結果。「

01.first你應該創建自己的數據庫,包括對數據庫中的每個項目的條形碼編號。(有,你可以使用這麼多的條碼類型)

02.if你介紹一個新產品,您應該爲您的新產品獲得或購買有效的條形碼號碼(確保您的號碼在全世界範圍內都是唯一的)。 -

**那麼你可以使用你的數據庫,以找到一個給定的條形碼**

相關問題