2011-11-14 9 views
1

画像ビューをクリックすると、ギャラリーから画像を選択したり、カメラで画像を撮影したりできます。私はオンラインのいくつかのチュートリアルを踏襲し、ここで私の試みです:ギャラリーから画像をアップロードできません

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class UploadImageActivity extends Activity { 
    private final int CAMERA_PICTURE = 1; 
    private final int GALLERY_PICTURE = 2; 
    private ImageView userPictureImageView; 
    private Intent pictureActionIntent = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     userPictureImageView = (ImageView) findViewById(R.id.image_view); 
     userPictureImageView.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       startDialog(); 
      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == GALLERY_PICTURE) { 
      Uri uri = data.getData(); 
      if (uri != null) { 
       // User had pick an image. 
       Cursor cursor = getContentResolver().query(uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); 
       cursor.moveToFirst(); 
       // Link to the image 
       final String imageFilePath = cursor.getString(0); 
       File photos = new File(imageFilePath); 
       Bitmap b = decodeFile(photos); 
       b = Bitmap.createScaledBitmap(b, 150, 150, true); 
       userPictureImageView.setImageBitmap(b); 
       cursor.close(); 
      } 
      else { 
       Toast toast = Toast.makeText(this, "No Image is selected.", Toast.LENGTH_LONG); 
       toast.show(); 
      } 
     } 
     else if (requestCode == CAMERA_PICTURE) { 
      if (data.getExtras() != null) { 
       // here is the image from camera 
       Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
       userPictureImageView.setImageBitmap(bitmap); 
      } 
     } 
    } 

    private Bitmap decodeFile(File f) { 
     try { 
      // decode image size 
      BitmapFactory.Options o = new BitmapFactory.Options(); 
      o.inJustDecodeBounds = true; 
      BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

      // Find the correct scale value. It should be the power of 2. 
      final int REQUIRED_SIZE = 70; 
      int width_tmp = o.outWidth, height_tmp = o.outHeight; 
      int scale = 1; 
      while (true) { 
       if (width_tmp/2 < REQUIRED_SIZE || height_tmp/2 < REQUIRED_SIZE) 
        break; 
       width_tmp /= 2; 
       height_tmp /= 2; 
       scale++; 
      } 

      // decode with inSampleSize 
      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize = scale; 
      return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
     } 
     catch (FileNotFoundException e) { 
     } 
     return null; 
    } 

    private void startDialog() { 
     AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this); 
     myAlertDialog.setTitle("Upload Pictures Option"); 
     myAlertDialog.setMessage("How do you want to set your picture?"); 

     myAlertDialog.setPositiveButton("Gallery", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       pictureActionIntent = new Intent(Intent.ACTION_GET_CONTENT, null); 
       pictureActionIntent.setType("image/*"); 
       pictureActionIntent.putExtra("return-data", true); 
       startActivityForResult(pictureActionIntent, GALLERY_PICTURE); 
      } 
     }); 

     myAlertDialog.setNegativeButton("Camera", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       pictureActionIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(pictureActionIntent, CAMERA_PICTURE); 
      } 
     }); 
     myAlertDialog.show(); 
    } 
} 

カメラが正常に動作しますが、ギャラリーがまったく動作しません。それは何らかの理由で墜落し続けました、誰かが私に光を当てることができましたか?ありがとう。

EDIT

エラーログ

11-14 01:09:30.566: E/AndroidRuntime(24630): FATAL EXCEPTION: main 
11-14 01:09:30.566: E/AndroidRuntime(24630): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.csun.spotr/com.csun.spotr.UploadImageActivity}: java.lang.NullPointerException 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.os.Looper.loop(Looper.java:130) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at java.lang.reflect.Method.invokeNative(Native Method) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at java.lang.reflect.Method.invoke(Method.java:507) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at dalvik.system.NativeStart.main(Native Method) 
11-14 01:09:30.566: E/AndroidRuntime(24630): Caused by: java.lang.NullPointerException 
11-14 01:09:30.566: E/AndroidRuntime(24630): at com.csun.spotr.UploadImageActivity.onActivityResult(UploadImageActivity.java:42) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
11-14 01:09:30.566: E/AndroidRuntime(24630): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528) 
11-14 01:09:30.566: E/AndroidRuntime(24630): ... 11 more 

はちょうど私が外にこのラインを取る場合ことに気づい: super.onActivityResult(requestCode, resultCode, data); それはもはやクラッシュが、ギャラリーから画像をクリックするとポップアップしませんでした画像ビュー上に表示されます。何か案が?

+0

どの例外が発生しているのですか? –

+0

@Samir:電話で手動でしか実行できないので、有用なメッセージが表示されませんでした。エミュレータを使用すると、私はすでにsdcardをセットアップしていても、常に「イメージが見つかりません」というプロンプトが表示されます。 – Chan

+0

あなたは何のエラーを表示していますか?エラーログ –

答えて

1
 private static final int SELECT_PICTURE = 1; 
     private String selectedImagePath, filemanagerstring; 
     private static File myFile = null; 

     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 

     startActivityForResult(Intent.createChooser(intent, 
       "Select Picture"), SELECT_PICTURE); 

onActivity結果は::

  if (data != null) { 
      Uri selectedImageUri = data.getData(); 
      filemanagerstring = selectedImageUri.getPath(); 
      selectedImagePath = getPath(selectedImageUri); 

      if (selectedImagePath != null) 
       myFile = new File(selectedImagePath); 
      else if (filemanagerstring != null) 
       myFile = new File(filemanagerstring); 

      if (myFile != null) { 

       Bitmap bmp_fromGallery = decodeImageFile(selectedImagePath); 


       System.out.println("Bitmap is :: " + myPhoto_bitmap); 
       //SET BITMAP TO IMAGEVIEW 
      } else { 
       Toast.makeText(getApplicationContext(), 
         myFile.getName() + "is null", Toast.LENGTH_LONG) 
         .show(); 
      } 
     } else { 
      Toast.makeText(SelectPhoto.this, "Please Select Image!!!", 
        Toast.LENGTH_LONG).show(); 
     } 
0

あなたは日食にNULLの値を持つものを送信することはできません。あなたは常にnullPointerExceptionを取得します。 com.csun.spotr.UploadImageActivity.onActivityResultで java.lang.NullPointerExceptionが
(UploadImageActivity.java:42)

原因下の行の最初であるコードの行番号である:によって引き起こさ

エラーを投げる

関連する問題