2

ドロップボックスに認証する別のアクティビティで、ドロップボックスからファイルをアップロードしようとしています。ユーザーが登録するこの RegisterActivity.java があり、後で登録が完了すると Web ブラウザーが表示され、ユーザーはドロップボックス認証を許可する必要があります。

後で私のアプリの別のアクティビティで、ユーザーがビデオをドロップボックスにアップロードしようとしています。アップロードは ASyncTask によって行われ、うまく機能します。問題は、もう一度再認証したくないということです。どうすれば修正できますか?同じセッションですか、それとも新しいセッションを開始しますか? 今、sam mDBApi フォーム RegisterAcitivity を使用しようとしていますが、それは間違っていると思います。キーは storeKeys() メソッドに格納され、SharedPreferences に保存されます。

事前にどうもありがとうございました

これが動作するペーストビンの私の RegisterActivity です。http://pastebin.com/K06JUWXv

ASyncTask UploadFile を呼び出すアクティビティは次のとおりです。

public class ShowVideo extends Activity{

    final static private String ACCOUNT_PREFS_NAME = "prefs";
    final static private String ACCESS_KEY_NAME = "ACCESS_KEY";
    final static private String ACCESS_SECRET_NAME = "ACCESS_SECRET";

    private DropboxAPI<AndroidAuthSession> mDBApi = RegisterActivity.mDBApi;
    private String[] storedKeys = getKeys();
    UploadFile upload;
    public static String path = "";
    public static String fileName;
    private VideoView ww;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //Forces landscape orientation which is what the camera uses.
        setContentView(R.layout.showvideo);
        Button yesButton = (Button) findViewById(R.id.yesButton);
        Button noButton  = (Button) findViewById(R.id.NoButton);

        Button dbButton = (Button) findViewById(R.id.dropboxButton);
        dbButton.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                if(v.getId() == R.id.dropboxButton){
                    if (mDBApi.getSession().isLinked() == true){
                        Log.d("ShowVideo", "TRUE");
                    }
                    if (mDBApi.getSession().isLinked() == false){
                        Log.d("ShowVideo", "FALSE");
                    }
                }
            }
        });
        yesButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                if(v.getId() == R.id.yesButton){
                UploadFile upload = new UploadFile(ShowVideo.this,mDBApi,path);
                upload.execute();
                }
            }
        });

        noButton.setOnClickListener(new OnClickListener() {
            public void onClick(View w) {
                        File file = new File(path);
                        boolean deleted = false;
                        deleted = file.delete();
                        Log.e("TAG", Boolean.toString(deleted));
                        Intent intent = new Intent(ShowVideo.this, CaptureVideo.class);
                        startActivity(intent);

            }
        });

        ww = (VideoView) findViewById(R.id.satisfiedVideoView);
        path = getRealPathFromURI(CaptureVideo.uriVideo);
        fileName = getFileNameFromUrl(path);

        //AndroidAuthSession session = new AndroidAuthSession(new AppKeyPair(ret[0], ret[1]), AccessType.APP_FOLDER);
        //mDBApi = new DropboxAPI<AndroidAuthSession>(session);
    }

    private void playVideo(){
        ww.setVideoURI(CaptureVideo.uriVideo);
        ww.setMediaController(new MediaController(this));
        ww.start();
        ww.requestFocus();
    }
    public static String getFileNameFromUrl(String path) {
        String[] pathArray = path.split("/");
        return pathArray[pathArray.length - 1];
    }

    public String getRealPathFromURI(Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

    /**DROPBOX-METHOD------------------------------------------*/

    private String[] getKeys() {
        SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0);
        String key = prefs.getString(ACCESS_KEY_NAME, null);
        String secret = prefs.getString(ACCESS_SECRET_NAME, null);
        if (key != null && secret != null) {
            String[] ret = new String[2];
            ret[0] = key;
            ret[1] = secret;
            return ret;
        } else {
            return null;
        }
    }



}

あなたがそれを見れば、これが私のASyncTaskです。必要ないはずです。

public class UploadFile extends AsyncTask<Void, Long, Boolean> {

    DropboxAPI<AndroidAuthSession> dDBApi;
    Context dContext;
    private String SAVE_PATH;

    public UploadFile(Context context,DropboxAPI<AndroidAuthSession> mDBApi, String path) {
        dContext = context.getApplicationContext();
        dDBApi = mDBApi;
        SAVE_PATH = path;
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        FileInputStream inputStream = null;
        try {
            File file = new File(SAVE_PATH);
            inputStream = new FileInputStream(file);
            Entry newEntry = dDBApi.putFileOverwrite("/GAMES/GAME_BETWEEN_USER_A_USER_B/" + "PresentVideo.mp4", inputStream, file.length(), null); 
        } 

        catch (DropboxException e) {
            Log.e("DbExampleLog", "Something went wrong while uploading.");
        } catch (FileNotFoundException e) {
            Log.e("DbExampleLog", "File not found.");
        } catch (IOException e) {
            Log.e("DbExampleLog", "Another Exception:" + e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            Log.e("DbExampleLog", "Another Exception:" + e.getMessage());
            e.printStackTrace();
        } 
        finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } 
                catch (IOException e) {
                }
            }
        }
        return null;
    }

}
4

0 に答える 0