0

私は、Google ドライブを Android アプリケーションに統合しようと、長い間懸命に取り組みました。しかし、これは悪い意味での落とし穴です。Google はいつも驚かされます。それはすべて、私が Google からの指示 (最初最初)に頼ったという事実から始まりました。OAuth 2.0 の作成、アプリケーションのキーの作成、アプリケーション reg の作成、ライブラリのインポートなど、すべての条件を満たしました。しかし、期待どおりに機能しませんでした-最初のケースでは、すべての例が作成され、「403 Forbidden Access Not Configured」を受け取りました、2 つ目は、Google が秘密鍵を発行していないため、実装できません。1 週間を通して、私はこの問題に対する別の解決策を探していました。多くの情報を調査し、多くの労力と時間を費やしましたが、結果はゼロでした。一般的な質問ArtOfWarfareから希望の光が見えてきました。しかし、彼が提案し、彼が動作するとされているコードは動作しません。アプリケーションがアカウントを使用できるようにすると、「Google との通信エラー」が原因で接続が失敗し、試行を繰り返しても同じ結果が得られます。その結果、ドライブとの通信を試みるためだけに「彼らの」コードを描きました。私はここに書いているので、動作しません。以下に示すコードは、「400 Bad Request Invalid Upload Request」を返します。. この問題を承認で解決する方法についてのアイデアはありますか、またはログインを成功させる他の方法はありますか? 私は建設的な会話を嬉しく思います。

package com.example.hiv;

import java.io.IOException;

import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.OperationCanceledException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import com.google.api.client.googleapis.services.GoogleKeyInitializer;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;

public class ActivityStart extends Activity {

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_activity_start);
    String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/drive";
    AccountManager accountManager = AccountManager.get(this);
    accountManager.invalidateAuthToken(accountManager.getAccounts()[0].type, null);
    accountManager.getAuthToken( accountManager.getAccountsByType("com.google")[0], AUTH_TOKEN_TYPE, null, this,
            new AccountManagerCallback<Bundle>() {

                public void run(final AccountManagerFuture<Bundle> future) {
                    try {
                        String authToken = future.getResult().getString(
                                AccountManager.KEY_AUTHTOKEN);

                            final HttpTransport transport = AndroidHttp.newCompatibleTransport();
                            final JsonFactory jsonFactory = new GsonFactory();
                            GoogleCredential credential = new GoogleCredential();
                            credential.setAccessToken(authToken);
                            final Drive drive = new Drive.Builder(transport, jsonFactory, credential)
                                    .setApplicationName("HIV")
                                    .setGoogleClientRequestInitializer(new GoogleKeyInitializer("*****yDaPx1EtTHpMMMULzYlxjc3xdwsf******"))
                                    .build();

                            Thread t = new Thread(new Runnable() {
                                @Override
                                public void run() {
                                  try {
                                    final com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
                                    body.setTitle("My Test File");
                                    body.setDescription("A Test File");
                                    body.setMimeType("text/plain");

                                    java.io.File fileContent = new java.io.File("data/data/com.example.hiv/document.txt");
                                    FileContent mediaContent = new FileContent("text/plain", fileContent);

                                    com.google.api.services.drive.model.File file = drive.files().insert(body, mediaContent).execute();

                                  } catch (UserRecoverableAuthIOException e) {
                                    e.printStackTrace();
                                  } catch (IOException e) {
                                    e.printStackTrace();
                                  }
                                }
                              });
                              t.start(); 

                    } catch (OperationCanceledException exception) {
                        // TODO
                    } catch (Exception exception) {
                        Log.d(this.getClass().getName(), exception.getMessage());
                    }
                }
            }, null);       
  } 
}
4

1 に答える 1

0

解決済み: サイズが 0 kB のファイルを送信しようとしています。

于 2013-03-26T08:53:09.263 に答える