barcode
をスキャンした後、barcode
を使用して商品の商品情報を取得するアプリを開発しています。
ユーザーにZXing barcode
アプリを個別にインストールさせたくないので、ZXing
コードをプロジェクトに埋め込みました。だから私はbarcode ID number
を入手することができました。
商品情報のように名前、メーカー、価格などバーコード番号を使用してgoogle search 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
エラーが発生する理由を見つけるのを手伝ってください。
APIIDをURLに追加してみてください。 https://developers.google.com/shopping-search/v1/getting_started#getting-started
私はそれを試し、あなたのコードのURLに基づいてマイケルコースMK5412クロノグラフウォッチの情報を得ることができました。
その結果、^に一致するようにURLビルダーを修正する必要があります。
また、必ず入れてください
<uses-permission Android:name="Android.permission.INTERNET"/>
マニフェストで。この男へのクレジット: http://androidforums.com/developer-101/100793-Java-net-unknownhostexception.html 。
ハッピーコーディング:)
API を使用し、 [〜#〜] gtin [〜#〜] で検索します。これは、バーコードでエンコードされた数値が表すものです。
「特定の製品を表すために使用されるバーコード番号とバーコード番号は世界中で一意です。ほとんどのバーコードAPIは、独自のデータベースから特定のバーコード番号を見つけて、その特定の製品情報を取得します(特定のバーコード番号が彼らのデータベース)そうでなければ、それは何の結果ももたらさない。」
01.最初に、データベース内の各アイテムのバーコード番号を含む独自のデータベースを作成する必要があります(使用できるバーコードタイプは非常にたくさんあります)
02.新製品を紹介する場合は、新製品の有効なバーコード番号を取得または購入する必要があります(番号が世界中で一意であることを確認してください)。
**次に、データベースを使用して、特定のバーコードのアイテム情報を見つけることができます**
ean-search.org のような他のバーコードデータベースもあります。