久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Google Drive SDK 異常

Google Drive SDK Exception(Google Drive SDK 異常)
本文介紹了Google Drive SDK 異常的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試運行以下代碼(主要取自 Stephen Wylie):

I am trying to run the following code (taken largely from Stephen Wylie):

package com.googledrive.googledriveapp;
// For Google Drive / Play Services
// Version 1.1 - Added new comments & removed dead code
// Stephen Wylie - 10/20/2012
import java.io.IOException;
import java.util.ArrayList;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.UserRecoverableAuthException;
import com.google.android.gms.common.AccountPicker;
import com.google.api.client.auth.oauth2.BearerToken;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.android2.AndroidHttp;
import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.json.JsonHttpRequest;
import com.google.api.client.http.json.JsonHttpRequestInitializer;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.Drive.Apps.List;
import com.google.api.services.drive.Drive.Files;
import com.google.api.services.drive.DriveRequest;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;

public class MainActivity extends Activity {
    private static final int CHOOSE_ACCOUNT=0;
    private static String accountName;
    private static int REQUEST_TOKEN=0;
    private Button btn_drive;
    private Context ctx = this;
    private Activity a = this;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        // set up the GUI layout
        setContentView(R.layout.activity_main);
        // set the variables to access the GUI controls
        btn_drive = (Button) findViewById(R.id.btn_drive);
            btn_drive.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                chooseAccount();
            }
            });
    }

    public void chooseAccount() {
        Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"}, false, null, null, null, null);
        startActivityForResult(intent, CHOOSE_ACCOUNT);
    }

    // Fetch the access token asynchronously.
    void getAndUseAuthTokenInAsyncTask(Account account) {
        AsyncTask<Account, String, String> task = new AsyncTask<Account, String, String>() {
            ProgressDialog progressDlg;
            AsyncTask<Account, String, String> me = this;

            @Override
            protected void onPreExecute() {
                progressDlg = new ProgressDialog(ctx, ProgressDialog.STYLE_SPINNER);
                progressDlg.setMax(100);
                progressDlg.setTitle("Validating...");
                progressDlg.setMessage("Verifying the login data you entered...

This action will time out after 10 seconds.");
                progressDlg.setCancelable(false);
                progressDlg.setIndeterminate(false);
                progressDlg.setOnCancelListener(new android.content.DialogInterface.OnCancelListener() {
                    public void onCancel(DialogInterface d) {
                        progressDlg.dismiss();
                        me.cancel(true);
                    }
                });
                progressDlg.show();
            }

            @Override
            protected String doInBackground(Account... params) {
                return getAccessToken(params[0]);
            }

            @Override
            protected void onPostExecute(String s) {
                if (s == null) {
                    // Wait for the extra intent
                } else {
                    accountName = s;
                    getDriveFiles();
                }
                progressDlg.dismiss();
            }
        };
        task.execute(account);
    }

    /**
     * Fetches the token from a particular Google account chosen by the user.  DO NOT RUN THIS DIRECTLY.  It must be run asynchronously inside an AsyncTask.
     * @param activity
     * @param account
     * @return
     */
    private String getAccessToken(Account account) {
        try {
            return GoogleAuthUtil.getToken(ctx, account.name, "oauth2:" + DriveScopes.DRIVE);  // IMPORTANT: DriveScopes must be changed depending on what level of access you want
        } catch (UserRecoverableAuthException e) {
            // Start the Approval Screen intent, if not run from an Activity, add the Intent.FLAG_ACTIVITY_NEW_TASK flag.
            a.startActivityForResult(e.getIntent(), REQUEST_TOKEN);
            e.printStackTrace();
            return null;
        } catch (GoogleAuthException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    private Drive getDriveService() {
        HttpTransport ht = AndroidHttp.newCompatibleTransport();             // Makes a transport compatible with both Android 2.2- and 2.3+
        JacksonFactory jf = new JacksonFactory();                            // You need a JSON parser to help you out with the API response
        Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accountName);
        HttpRequestFactory rf = ht.createRequestFactory(credential);
        Drive.Builder b = new Drive.Builder(ht, jf, null);
        b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {

            @Override
            public void initialize(JsonHttpRequest request) throws IOException {
                DriveRequest driveRequest = (DriveRequest) request;
                driveRequest.setPrettyPrint(true);
                driveRequest.setOauthToken(accountName);
            }
        });
        return b.build();
    }

    /**
     * Obtains a list of all files on the signed-in user's Google Drive account.
     */
    private void getDriveFiles() {
        Drive service = getDriveService();
        Log.d("SiteTrack", "FUNCTION getDriveFiles()");
        Files.List request;
        try {
            request = service.files().list(); // .setQ("mimeType="text/plain"");
        } catch (IOException e) {


            e.printStackTrace();
            return;
        }
        do {
            FileList files;
            try {
                System.out.println("got here");
                Log.d("SiteTrack", request.toString());
                **files = request.execute();**
            } catch (IOException e) {
                e.printStackTrace();
                Log.d("SiteTrack", "Exception");
                return;
            }
            ArrayList<File> fileList = (ArrayList<File>) files.getItems();
            Log.d("SiteTrack", "Files found: " + files.getItems().size());
            for (File f : fileList) {
                String fileId = f.getId();
                String title = f.getTitle();
                Log.d("SiteTrack", "File " + fileId + ": " + title);
            }
            request.setPageToken(files.getNextPageToken());
        } while (request.getPageToken() != null && request.getPageToken().length() >= 0);
    }

    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        if (requestCode == CHOOSE_ACCOUNT && resultCode == RESULT_OK) {
            accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
            GoogleAccountManager gam = new GoogleAccountManager(this);
            getAndUseAuthTokenInAsyncTask(gam.getAccountByName(accountName));
            Log.d("SiteTrack", "CHOOSE_ACCOUNT");
        } else if (requestCode == REQUEST_TOKEN && resultCode == RESULT_OK) {
            accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
            Log.d("SiteTrack", "REQUEST_TOKEN");
        }
    }   
}

但是,我得到以下異常:

However, I get the following exception:

11-19 16:35:27.758: W/System.err(23287): com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
11-19 16:35:27.758: W/System.err(23287): {
11-19 16:35:27.758: W/System.err(23287):   "code" : 403,
11-19 16:35:27.758: W/System.err(23287):   "errors" : [ {
11-19 16:35:27.758: W/System.err(23287):     "domain" : "usageLimits",
11-19 16:35:27.762: W/System.err(23287):     "message" : "Access Not Configured",
11-19 16:35:27.762: W/System.err(23287):     "reason" : "accessNotConfigured"
11-19 16:35:27.762: W/System.err(23287):   } ],
11-19 16:35:27.762: W/System.err(23287):   "message" : "Access Not Configured"
11-19 16:35:27.762: W/System.err(23287): }
11-19 16:35:27.762: W/System.err(23287):    at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:237)
11-19 16:35:27.762: W/System.err(23287):    at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:207)
11-19 16:35:27.762: W/System.err(23287):    at com.google.api.services.drive.Drive$Files$List.execute(Drive.java:1071)
11-19 16:35:27.762: W/System.err(23287):    at com.googledrive.googledriveapp.MainActivity.getDriveFiles(MainActivity.java:173)
11-19 16:35:27.762: W/System.err(23287):    at com.googledrive.googledriveapp.MainActivity.access$3(MainActivity.java:156)
11-19 16:35:27.762: W/System.err(23287):    at com.googledrive.googledriveapp.MainActivity$2.onPostExecute(MainActivity.java:104)
11-19 16:35:27.765: W/System.err(23287):    at com.googledrive.googledriveapp.MainActivity$2.onPostExecute(MainActivity.java:1)
11-19 16:35:27.765: W/System.err(23287):    at android.os.AsyncTask.finish(AsyncTask.java:417)
11-19 16:35:27.765: W/System.err(23287):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
11-19 16:35:27.765: W/System.err(23287):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
11-19 16:35:27.765: W/System.err(23287):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 16:35:27.765: W/System.err(23287):    at android.os.Looper.loop(Looper.java:123)
11-19 16:35:27.765: W/System.err(23287):    at android.app.ActivityThread.main(ActivityThread.java:4627)
11-19 16:35:27.765: W/System.err(23287):    at java.lang.reflect.Method.invokeNative(Native Method)
11-19 16:35:27.769: W/System.err(23287):    at java.lang.reflect.Method.invoke(Method.java:521)
11-19 16:35:27.769: W/System.err(23287):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-19 16:35:27.769: W/System.err(23287):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-19 16:35:27.769: W/System.err(23287):    at dalvik.system.NativeStart.main(Native Method)

在我上面的代碼中跟蹤到 files = request.execute(); 行(我用星號標記了它).我在我的 Google API 控制臺中啟用了 Drive SDK 和 Drive API.以下是我的 Drive SDK 設置的幾個快照:對于未顯示的客戶端 ID 部分,我只是從 API 訪問部分粘貼了已安裝應用程序的客戶端 ID"(我還嘗試了Drive SDK 的客戶端 ID").有誰知道問題出在哪里?

which traces to the line files = request.execute(); in my code above (I have marked it with asterisks). I have enabled both the Drive SDK and the Drive API in my Google APIs Console. Here are a couple of snapshots of my Drive SDK settings: For the Client ID section that is not pictured, I simply pasted the "Client ID for installed applications" from the API Access section (I also tried the "Client ID for Drive SDK"). Anyone know what the problem is?

推薦答案

已抱歉,我剛剛意識到我們可以在調試模式下使用 debug.keystore 對 apk 進行簽名.所以,最重要的是在您的 Google API 控制臺中插入正確的 SHA1 密鑰.(使用 Stephen Wylie 在他的 Google+ 帖子中提到的 JRE7 工具生成)

EDITED: Sorry I just realized that we can sign the apk in debugging mode using debug.keystore. SO, the most important thing is insert the correct SHA1 key in your Google API console. (generated using the JRE7 tool as mentioned by Stephen Wylie in his Google+ post)

另請參閱 (developer.android.com/tools/publishing/app-signing.html#debugmode) 以獲取密鑰庫密碼

Also see (developer.android.com/tools/publishing/app-signing.html#debugmode) for the keystore password

經(jīng)過反復試驗,我終于能夠在我的谷歌驅動器中列出文件雖然我不確定這是否是最正確的答案,但至少我現(xiàn)在可以列出文件了

After some trial and error, I finally able to list files in my google drive Although I am not sure whether this is the most correct answer, but at least I am able to list files now

首先,請參閱 Stephen Wylie 更新的 Google+ 帖子https://plus.google.com/u/0/114042449736049687152/posts/CD3L8zcJg5Z

First, please refer to Stephen Wylie updated Google+ post https://plus.google.com/u/0/114042449736049687152/posts/CD3L8zcJg5Z

使用 JRE7 工具通過 .keystore 生成 SHA1 密鑰

generate the SHA1 key with your .keystore using the JRE7 tool

我正在使用在我的 google play 商店中使用的 .keystore 文件(如果你沒有keystore,你可以到你的項目,點擊export,然后它會要求你創(chuàng)建一個.keystore文件)

I am using the .keystore file that I had been using with my google play store (If you do not have any keystore, you can go to your project, click export, then it will request you to create a .keystore file)

使用生成的 SHA1 密鑰,轉到您的 Google API 控制臺(最好從頭開始,刪除當前項目并開始一個新項目)

with the generated SHA1 key, go to your Google API console (it is best if you start from fresh, delete the current project and start a new one)

-啟用 Drive API

-enable Drive API

-啟用 Drive SDK

-enable Drive SDK

-轉到 API 訪問

-創(chuàng)建客戶 ID

-此處重要,選擇已安裝的應用程序和安卓

-IMPORTANT here, choose Installed application & Android

-同樣重要的是,輸入您生成的 SHA1 密鑰

-ALSO IMPORTANT, key in your generated SHA1 key

-鍵入您在 Eclipse 項目中使用的正確包名稱 (com.example.xxx)

-key in your CORRECT package name (com.example.xxx) that you are using in your eclipse project

-轉到Drive SDK選項卡-上傳圖標

-Go to Drive SDK tab -upload icon

-重要,從 API 訪問選項卡中輸入您的 CLIENT ID(已安裝應用程序的客戶端 ID)

-IMPORTANT, key in your CLIENT ID (Client ID for installed applications) from the API Access tab

-插入 Stephen Wylie 帖子中提到的 3 個作用域,[/userinfo.email,/userinfo.profile,/auth/drive]

-Insert 3 scopes mentioned in Stephen Wylie post, [/userinfo.email, /userinfo.profile, /auth/drive]

-插入網(wǎng)址

-勾選多文件支持

再次確保代碼中的包名稱與您插入 Google API 控制臺的包名稱相同

Again, make sure your package name in your code is same as the package name you inserted into Google API Console

最后,在eclipse中,使用剛才創(chuàng)建的.keystore文件導出你的項目

Finally, in eclipse, export your project using the .keystore file you created just now

將導出的APK文件放入手機,安裝試試.

Put the exported APK file into your phone, install and try.

檢查您的 LogCat 以顯示您的 Google Drive 中列出的文件

Check your LogCat to show the listed files from your Google Drive

我用這種方法成功了.

已如果您使用 debug.keystore 生成了 SHA1 密鑰,則可以跳過導出"部分.只需調試您的應用程序就可以了.Eclipse 會自動使用 debug.keystore 對 apk 進行簽名.

EDITED: If you generated the SHA1 key with the debug.keystore, you can skip the "Export" part. Just debug your application is OK. Eclipse will automatically sign the apk with debug.keystore.

已下次您的代碼準備就緒時,您需要使用您的真實 .keystore 生成一個新的 SHA1 密鑰,然后輸入到 Google API 控制臺.

EDITED: Next time your code is ready, you need to generate a new SHA1 key with your real .keystore, then input into the Google API console.

編輯 2:確保您的清單包含這些

EDITED 2: Make sure your manifest include these

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

這篇關于Google Drive SDK 異常的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

Upload progress listener not fired (Google drive API)(上傳進度偵聽器未觸發(fā)(Google 驅動器 API))
Save file in specific folder with Google Drive SDK(使用 Google Drive SDK 將文件保存在特定文件夾中)
Google Drive Android API - Invalid DriveId and Null ResourceId(Google Drive Android API - 無效的 DriveId 和 Null ResourceId)
Google drive api services account view uploaded files to google drive using java(谷歌驅動api服務賬戶查看上傳文件到谷歌驅動使用java)
Google Drive service account returns 403 usageLimits(Google Drive 服務帳號返回 403 usageLimits)
com.google.api.client.json.jackson.JacksonFactory; missing in Google Drive example(com.google.api.client.json.jackson.JacksonFactory;Google Drive 示例中缺少)
主站蜘蛛池模板: 久久久久久久网 | 99爱在线视频 | 精精精精xxxx免费视频 | 日韩欧美电影在线 | 色视频免费 | 超碰成人免费观看 | 亚洲 欧美 另类 综合 偷拍 | 久久亚洲综合 | 久久99精品久久久久久国产越南 | 天天躁日日躁狠狠躁2018小说 | 日韩精品免费看 | 成人在线视频一区 | 美女黄网| 精品毛片 | 久久久久午夜 | 一区二区在线 | 欧美电影一区 | 欧美日韩在线综合 | 九九国产在线观看 | 午夜免费观看 | 欧美久久一区二区 | 激情五月激情综合网 | 国产精品激情 | h视频在线免费观看 | 久久国产精品免费 | 毛片一级片 | 全免费a级毛片免费看视频免 | 国内精品久久久久久影视8 最新黄色在线观看 | 国产一区二区三区在线看 | 日韩视频 中文字幕 | 在线观看成人免费视频 | 国产一区二区久久 | 国产成人精品一区二区 | 国产一区视频在线 | 91xxx在线观看 | 美女久久久久久久 | 日韩久久在线 | 国产中文视频 | 国产精品日韩 | 久久久国产一区二区三区四区小说 | 亚洲免费在线 |