2011-02-08 153 views
2

问候,Android上传图片

我正尝试在Android设备上上传图片。

我有以下代码导致图像选择器来检查SD卡(这是我想要的)。

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent, 1); 

但是接下来我该做什么?有没有我可以重写的一些类来处理被点击的图像?我试过Google搜索,但找不到任何东西。我希望有人能指出我正确的方向。


试图采取willytate的意见,但现在我不断收到以下错误:

02-08 16:58:01.574: ERROR/AndroidRuntime(16962): FATAL EXCEPTION: WebViewCoreThread 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962): java.lang.NullPointerException 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.app.Activity.startActivityForResult(Activity.java:2890) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at prestocab.driver.Main$Uploader.upload(Main.java:172) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.webkit.WebViewCore.access$3300(WebViewCore.java:66) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1226) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.os.Looper.loop(Looper.java:143) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:642) 
02-08 16:58:01.574: ERROR/AndroidRuntime(16962):  at java.lang.Thread.run(Thread.java:1102) 

这里是我的类:

public class Uploader extends Activity{ //uploader 
     @Override 
     protected void onCreate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
     } 
     public void upload(){ 
      Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent,0); 

     } 
     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (resultCode == RESULT_OK) { 
       Uri selectedImageUri = data.getData(); 
       String selectedImagePath = data.getDataString(); 
       Toast.makeText(Main.this, selectedImagePath, 2000); 
      } 
     } 
    } 

提前许多感谢,

+0

u能张贴解决代码 – 2011-05-17 12:47:46

+0

嘿,我最后不得不以获得rentacoder ... – Eamorr 2011-05-19 22:10:34

回答

3

Eamorr ,

您需要在onActivityResult()中收到返回的图像。您将检查requestCode值,以确保它是您希望返回的意图。在你的情况下,你把1。然后处理图像上传...像这样:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     switch(requestCode) { 
     case 1: 
      imageUri = data.getData(); //get the Uri of the image from the returned data 
      //upload imageUri 
      break; 
     } 
    } 
} 

编辑: Eamorr。

使用此函数获取映射到data.getDataString()的ImagePath字符串。只需通过imageUri即可。

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    startManagingCursor(cursor); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

其实我有我的应用程序,所以我已经通过所有这些障碍相同的功能> <