2012-04-06 34 views
13

Tôi đang phát triển ứng dụng sử dụng mã vạch để lấy thông tin sản phẩm của các mặt hàng sau khi quét mã vạch.Lấy thông tin sản phẩm như tên, giá, vv sử dụng mã số

Tôi không muốn người dùng cài đặt ứng dụng mã vạch ZXing riêng biệt nên tôi đã nhúng mã ZXing vào dự án của mình. Vì vậy, tôi đã có thể có được số ID mã vạch.

Tôi muốn nhận thông tin sản phẩm như tên, nhà sản xuất, giá, v.v ... sử dụng số mã vạch bằng cách sử dụng api tìm kiếm google để mua sắm.

Đây là mã tôi đã sử dụng

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); } 


} 

}

Nhưng tôi không nhận được bất kỳ văn bản trong httpStuff.

Đây là 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 

Xin hãy giúp tôi tìm ra lý do tại sao tôi nhận được lỗi.

+0

bạn đã nhận được bất kỳ giải pháp cho việc này? Tôi phải thực hiện tương tự trong ứng dụng của mình cho một trong những khách hàng của chúng tôi. Bạn có thể vui lòng gửi cho tôi giải pháp không? – Noundla

Trả lời

1

Bạn muốn sử dụng the API và tìm kiếm theo số GTIN là số được mã hóa trong mã vạch đại diện.

+0

Xin chào, tôi đã sử dụng google "tìm kiếm api để mua sắm" và GTIN như bạn đã chỉ định và cập nhật bài đăng của tôi .. Vui lòng kiểm tra mã. Tôi không thể nhận được kết quả chuỗi. Tôi đã đăng logcat – DSP

5

Thử thêm id API của bạn vào url. https://developers.google.com/shopping-search/v1/getting_started#getting-started

Tôi đã thử và có thể lấy thông tin về Đồng hồ Chronograph Michael Kors MK5412 dựa trên url của mã của bạn.

https://www.googleapis.com/shopping/search/v1/public/products?country=US&q=691464717759&restrictBy=gtin=691464717759&key= {chìa khóa của bạn ở đây}

Do vậy, bạn cần phải sửa chữa xây dựng url của bạn để phù hợp với ^.

Ngoài ra hãy chắc chắn rằng bạn đặt

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

trong biểu hiện của bạn. Ghi có cho anh chàng này: http://androidforums.com/developer-101/100793-java-net-unknownhostexception.html.

Chúc mừng mã hóa :)

0

Tôi nghĩ, "số mã vạch được sử dụng để biểu thị một sản phẩm cụ thể và mã vạch là duy nhất cho tất cả các mã vạch trên thế giới. Tìm mã số đã cho từ cơ sở dữ liệu của riêng chúng để nhận thông tin sản phẩm cụ thể đó số mã vạch tồn tại trong cơ sở dữ liệu của chúng) nếu không nó sẽ không đưa ra bất kỳ kết quả nào. "

01.first bạn nên tạo cơ sở dữ liệu riêng của bạn bao gồm cả số mã vạch cho mỗi mục trong cơ sở dữ liệu của bạn. (Có rất nhiều loại mã vạch mà bạn có thể sử dụng)

02.if bạn giới thiệu một sản phẩm mới, bạn sẽ nhận được hoặc mua số mã vạch hợp lệ cho sản phẩm mới của mình (đảm bảo rằng số của bạn là duy nhất trên toàn thế giới).-

** sau đó bạn có thể sử dụng cơ sở dữ liệu của bạn để tìm các thông tin mục cho một mã vạch cho **

Các vấn đề liên quan