15

barcodeをスキャンした後、アイテムの製品情報を取得するために使用するアプリを開発していbarcodeます。

ユーザーにアプリを個別にインストールしてほしくないので、コードをプロジェクトZXing barcodeに埋め込みました。ZXingということで入手できましたbarcode ID number

ショッピング用のGoogle検索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

エラーが発生する理由を見つけるのを手伝ってください。

4

4 に答える 4

5

APIIDをURLに追加してみてください。https://developers.google.com/shopping-search/v1/getting_started#getting-started

私はそれを試してみて、あなたのコードのURLに基​​づいてマイケルコースMK5412クロノグラフウォッチの情報を得ることができました。

https://www.googleapis.com/shopping/search/v1/public/products?country=US&q=691464717759&restrictBy=gtin=691464717759&key= {ここにキーを入力}

その結果、^に一致するようにURLビルダーを修正する必要があります。

また、あなたが置くことを確認してください

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

マニフェストで。この人の功績:http://androidforums.com/developer-101/100793-java-net-unknownhostexception.html

ハッピーコーディング:)

于 2012-07-09T06:13:47.580 に答える
1

APIを使用して、バーコードにエンコードされた数字が表すGTINで検索したいと考えています。

于 2012-04-06T12:49:17.950 に答える
0

ean-search.orgなど、他のバーコード データベースもあります。

于 2014-01-31T13:22:53.923 に答える
0

「特定の製品を示すために使用されるバーコード番号であり、バーコード番号は世界中で一意であると思います。ほとんどのバーコード API は、独自のデータベースから特定のバーコード番号を見つけて、その特定の製品情報を取得します (特定のバーコード番号が彼らのデータベース) そうでなければ、何の結果も得られません。」

01.まず、データベース内の各アイテムのバーコード番号を含む独自のデータベースを作成する必要があります。 (使用できるバーコードの種類は非常に多くあります)

02.新製品を紹介する場合は、新製品の有効なバーコード番号を取得または購入する必要があります (番号が世界中で一意であることを確認してください)--

** その後、データベースを使用して、特定のバーコードのアイテム情報を見つけることができます **

于 2015-01-30T12:49:22.303 に答える