2017-04-11 8 views
0

GoogleドライブAPIを使用して、ユーザーがファイルを選択して(これまでのところ)メタデータを取得できるようにしようとしています。私は(抽出)でだのはここAndroid:GoogleドライブgetMetaData()がコールバックをコールしない

です:

@Override 
public void onConnected(Bundle connectionHint) { 
    super.onConnected(connectionHint); 
    IntentSender intentSender = Drive.DriveApi 
     .newOpenFileActivityBuilder() 
     .build(getGoogleApiClient()); 
    try { 
     startIntentSenderForResult(
      intentSender, REQUEST_CODE_OPENER, null, 0, 0, 0); 
    } catch (SendIntentException e) { 
     Log.w(TAG, "Unable to send intent", e); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case REQUEST_CODE_OPENER: 
      if (resultCode == RESULT_OK) { 
       if (data != null) { 
        DriveId driveId = data.getParcelableExtra(OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 
        Log.d(TAG, "driveId = " + driveId.encodeToString()); 
        //driveId.asDriveResource().getMetadata(getGoogleApiClient()) 
        driveId.asDriveFile().getMetadata(getGoogleApiClient()) 
         .setResultCallback(new ResultCallback<DriveResource.MetadataResult>() { 
          public void onResult(@NonNull DriveResource.MetadataResult mdr) { 
           // Never gets here 
          } 
         }); 
       } 
      } 
      break; 
     default: 
      super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

だけで正常に動作するようです。それはDriveIdを記録し、getMetadata()コールに到達します。しかし、コールバックを呼び出すことはありません。onResult()には決して行きません。

APIのドキュメントとGoogleのサンプルコードを勉強するうちに、私はそれが何であるかを知ることができません。

編集追加します。

私は setResultCallback() await()に(スレッドで)使用してからそれを変更しようとしたが、 DriveIDは再び罰金である一方で、 MetadataResultがあり

CANCELEDstatusCode(私は、SELECTをクリックするにもかかわらず、ドライブファイルのピッカーから)。したがって、getMetadata()を呼び出すと、nullが返されます。

これは、状況が悪くなる可能性がある場所をさらに示唆していますか?

答えて

0

チェックのgetMetaData()。setResultCallBack()コードhere

上記のコードでは、空はonResultブロックを保持しています。 onResultブロック内のMetaDataResultオブジェクトを使用して、必要なファイル/フォルダに関するメタデータを取得する必要があります。ステータスの

チェックメタデータの詳細については、成功か MetaDataResult OBJ

final ResultCallback<MetadataResult> metadataCallback = new ResultCallback<MetadataResult>() { 
    @Override 
    public void onResult(MetadataResult result) { 
     if (!result.getStatus().isSuccess()) { 
      showMessage("Problem while trying to retrieve the file metadata"); 
      return; 
     } 
     if (result.getMetadata().isPinnable()) { 
      showMessage("File is pinnable"); 
     } 
}; 

には、そのメタデータのコールバックが成功でない場合android doc


はそのdriveIdが一致していないthatsの表示された場合は

このSOスレッドのメソッドを試して、そのファイルの正しいIDを取得してください。link

uがuが取得driveIdでこれを行うことができます。

Drive.DriveApi.fetchDriveId(getGoogleApiClient(), driveId.getResourceId()).setResultCallback(idCallback); 

final ResultCallback<DriveApi.DriveIdResult> idCallback = new ResultCallback<DriveApi.DriveIdResult>() { 
    @Override 
    public void onResult(DriveApi.DriveIdResult result) { 
     if (!result.getStatus().isSuccess()) { 
      showMessage("Cannot find DriveId. Are you authorized to view this file?"); 
      return; 
     } 
     DriveId driveId = result.getDriveId(); 
     showLogDebug(driveId + " in idCallback of fetchId"); 
     DriveFile file = driveId.asDriveFile(); 
     file.getMetadata(getGoogleApiClient()).setResultCallback(metadatacallBack); 

} を};

+0

ありがとうございました。申し訳ありませんが、私は実際の 'onResult'コードを削除して、例を簡潔にして、そのコメントに置き換えました。私が与えた例では、あなたのコードをそこに置くことができました。 'isSuccess()'をチェックすることは決してありません。 –

関連する問題