在 Android 中使用 Google Books API [英] Using Google Books API in Android

查看:38
本文介绍了在 Android 中使用 Google Books API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我是 Android 新手,正在使用 Web API.我目前正在编写一个应用程序,它可以扫描一本书的条形码,然后在 Google 图书中搜索它.

Hi I'm new to Android and using web APIs. I'm currently writing an application that can scan a barcode from a book and then search Google Books for it.

到目前为止,我在我的应用程序中实现了 Scandit,我注册并从 Google API 控制台获取了图书 API 的 API 密钥.从那里我不知道如何继续并开始编码.到目前为止,我的理解是它需要我通过 uri 发出请求数据,但我一直在思考如何对其进行实际编码.我想知道是否有人可以指出正确的方向或提供示例代码来展示如何使用 URI 获取数据.

So far I implemented Scandit into my application and I registered and got the API key from Google API console for Books API. From there I do not know how to continue and start coding it. So far from my understanding it requires me make a request data via uri but I'm stuck on how to actually code it. I'm wondering if anyone could point me to the right direction or provide a sample code that shows how to fetch data using URI.

我还下载了 zipped Book API Jar 库 我需要使用它吗?我问这个是因为在这个网站上的一个关于 Google Places API 的问题中,答案之一说你需要的只是使用 Google API 作为构建目标,它不需要任何 Jar 文件,但这是否适用于 Books API 作为好吗?

I also downloaded the zipped Book API Jar libraries do I need to make use of this? I ask this because from a question on Google Places API on this website, one of the answer said that all you need is to use Google API as the build target and it doesn't require any Jar files but does this apply to Books API as well?

此外,我正在使用 Eclipse,我应该将构建目标设置为 Google APIs 16 吗?我猜这是对的,因为我计划将来在此应用中使用 Google 地图.

Also I'm using Eclipse, should I set my build target to be Google APIs 16? I'm guessing this is right since I plan to use Google Maps in future with this app.

谢谢,这是我第一次在这里提问.

Thanks this is first time I asked a question on here.

推荐答案

我自己刚刚完成了这个.这就是我使用 HttpURLConnectionAsyncTask 实现它的方式(我只是调用https://www.googleapis.com/books/v1/volumes?q=isbn:"+yourISBN 并解析 JSON):

I just finished doing this myself. This is how I implemented it using an HttpURLConnection and an AsyncTask (I just call "https://www.googleapis.com/books/v1/volumes?q=isbn:"+yourISBN and parse the JSON):

// Received ISBN from Barcode Scanner. Send to GoogleBooks to obtain book information.
class GoogleApiRequest extends AsyncTask<String, Object, JSONObject>{

    @Override
    protected void onPreExecute() {
        // Check network connection.
        if(isNetworkConnected() == false){
            // Cancel request.
            Log.i(getClass().getName(), "Not connected to the internet");
            cancel(true);
            return;
        }
    }
    @Override
    protected JSONObject doInBackground(String... isbns) {
        // Stop if cancelled
        if(isCancelled()){
            return null;
        }

        String apiUrlString = "https://www.googleapis.com/books/v1/volumes?q=isbn:" + isbns[0];
        try{
            HttpURLConnection connection = null;
            // Build Connection.
            try{
                URL url = new URL(apiUrlString);
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setReadTimeout(5000); // 5 seconds
                connection.setConnectTimeout(5000); // 5 seconds
            } catch (MalformedURLException e) {
                // Impossible: The only two URLs used in the app are taken from string resources.
                e.printStackTrace();
            } catch (ProtocolException e) {
                // Impossible: "GET" is a perfectly valid request method.
                e.printStackTrace();
            }
            int responseCode = connection.getResponseCode();
            if(responseCode != 200){
                Log.w(getClass().getName(), "GoogleBooksAPI request failed. Response Code: " + responseCode);
                connection.disconnect();
                return null;
            }

            // Read data from response.
            StringBuilder builder = new StringBuilder();
            BufferedReader responseReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line = responseReader.readLine();
            while (line != null){
                builder.append(line);
                line = responseReader.readLine();
            }
            String responseString = builder.toString();
            Log.d(getClass().getName(), "Response String: " + responseString);
            JSONObject responseJson = new JSONObject(responseString);
            // Close connection and return response code.
            connection.disconnect();
            return responseJson;
        } catch (SocketTimeoutException e) {
            Log.w(getClass().getName(), "Connection timed out. Returning null");
            return null;
        } catch(IOException e){
            Log.d(getClass().getName(), "IOException when connecting to Google Books API.");
            e.printStackTrace();
            return null;
        } catch (JSONException e) {
            Log.d(getClass().getName(), "JSONException when connecting to Google Books API.");
            e.printStackTrace();
            return null;
        }
    }
    @Override
    protected void onPostExecute(JSONObject responseJson) {
        if(isCancelled()){
            // Request was cancelled due to no network connection.
            showNetworkDialog();
        } else if(responseJson == null){
            showSimpleDialog(getResources().getString(R.string.dialog_null_response));
        }
        else{
            // All went well. Do something with your new JSONObject.
        }
    }
}

protected boolean isNetworkConnected(){

    // Instantiate mConnectivityManager if necessary
    if(mConnectivityManager == null){
        mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    }
    // Is device connected to the Internet?
    NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
    if(networkInfo != null && networkInfo.isConnected()){
        return true;
    } else {
        return false;
    }
}

我省略了我的对话方法的代码,因为它们不相关.希望这会有所帮助.

I've omitted the code for my dialog methods as they are not relevant. Hope this helps.

这篇关于在 Android 中使用 Google Books API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆