我正在开发一个应用程序,该应用程序在扫描barcode后使用barcode获取商品的产品信息。

我不希望用户单独安装ZXing barcode应用程序,因此我将ZXing代码嵌入到我的项目中。这样我就可以获得barcode ID number

我想使用谷歌搜索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

请帮助我找到出现错误的原因。

最佳答案

尝试在URL上添加您的API ID。 https://developers.google.com/shopping-search/v1/getting_started#getting-started

我尝试了一下,并且能够根据您的代码的URL获取Michael Kors MK5412计时码表的信息。

https://www.googleapis.com/shopping/search/v1/public/products?country=US&q=691464717759&restrictBy=gtin=691464717759&key= {您的 key 在这里}

结果,您必须修复URL构建器以匹配^。

还要确保你把

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

在你的 list 上。归功于这个家伙:http://androidforums.com/developer-101/100793-java-net-unknownhostexception.html

快乐的编码:)

关于java - 使用条形码获取产品信息,例如名称,价格等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10043579/

10-14 11:11
查看更多