2013-05-30 59 views
1

我使用下面的代碼上傳圖像,但它不會工作。在下面的代碼中,try塊顯示錯誤,文件值將爲空任何人都可以幫助我解決這個問題。將圖像從android應用程序上傳到谷歌驅動器

public class MainActivity extends Activity { 

static final int REQUEST_ACCOUNT_PICKER = 1; 
    static final int REQUEST_AUTHORIZATION = 2; 
    static final int CAPTURE_IMAGE = 3; 
private static final int TAKE_PICTURE = 2; 
ImageView im; 

    private static Uri fileUri; 
    java.io.File fileContent; 
    FileContent mediaContent; 
    java.io.File f; 
    File body; 
    File nfile; 
    File file; 
    private static Drive service; 
    private GoogleAccountCredential credential; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    im=(ImageView)findViewById(R.id.imageView1); 
    credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE); 
    startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 

    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    switch (requestCode) { 
    case REQUEST_ACCOUNT_PICKER: 
     if (resultCode == RESULT_OK && data != null && data.getExtras() != null) { 
     String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
     if (accountName != null) { 
      credential.setSelectedAccountName(accountName); 
      service = getDriveService(credential); 
      startCameraIntent(); 

     } 
     } 
     break; 
    case REQUEST_AUTHORIZATION: 
     Toast.makeText(getApplicationContext(), ""+REQUEST_AUTHORIZATION,100).show(); 
     if (resultCode == Activity.RESULT_OK) { 
      saveFileToDrive(); 
     } else { 
     startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 

     } 
     break; 
    case CAPTURE_IMAGE: 
     if (resultCode == Activity.RESULT_OK) { 
     saveFileToDrive(); 
     } 
    } 
    } 

    private void startCameraIntent() { 
    String mediaStorageDir = Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES).getPath(); 



    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date(0, 0, 0)); 
    f=new java.io.File(Environment.getExternalStorageDirectory(),"test"+timeStamp+".jpg"); 


    fileUri=Uri.fromFile(f); 

    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    startActivityForResult(cameraIntent,TAKE_PICTURE); 


    } 

    private void saveFileToDrive() { 


     Toast.makeText(getApplicationContext(), "start",100).show(); 
    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try 
      { 
     // File's binary content 
      fileContent = new java.io.File(fileUri.getPath()); 
      mediaContent= new FileContent("image/jpeg", fileContent); 


      body=new File(); 

      body.setTitle(fileContent.getName()); 
      body.setMimeType("image/jpeg"); 
      //file=body; 

      file= service.files().insert(body, mediaContent).execute(); 


       //file=service.files().insert(body).execute(); 
       showToast("try run: "); 


      if (file!=null) 
      { 
      showToast("Photo uploaded: " + file.getTitle()); 

      startCameraIntent(); 
      } 
      else 
      {  
       showToast("error"); 
      } 
     } 

      catch (UserRecoverableAuthIOException e) { 
       startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); 
       showToast("first catch"); 

      } catch (IOException e) { 
       e.printStackTrace(); 
       showToast("second catch"+file); 

      } 
      finally 
      { 

       showToast("finally"); 


      } 
      } 

    }); 
    t.start(); 


     } 



    private Drive getDriveService(GoogleAccountCredential credential) { 
    return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential) 
     .build(); 
    } 

    public void showToast(final String toast) { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     Toast.makeText(getApplicationContext(),toast,100).show(); 
     } 
    }); 
    }; 
} 

或者是否有任何方式將文件從android應用程序發送到谷歌驅動器。

回答

0

好了,有你的代碼中的錯誤:

startActivityForResult(cameraIntent,TAKE_PICTURE); 

只是更換爲:

startActivityForResult(cameraIntent,CAPTURE_IMAGE); 

問候

+0

是什麼take_picture和捕捉圖像 – Arut

+0

兩者都是的區別同樣的權利或任何差異。 – Arut

+0

區別在於每個代碼。當您調用「startActivityForResult」時,您必須提供與「onActivityResult」中的某些情況相匹配的代碼。問候 –

相關問題