2013-05-20 5 views
0

Я пытаюсь показать pic, щелкнув с камеры на другом изображении изображения активности, но получая изображение из пакета в растровые изображения. Я получаю эту ошибку. мой кодПолучение java.lang.classCastException: android.os.Bundle

package com.example.iwm; 

import java.io.File; 

import java.text.SimpleDateFormat; 


import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Environment; 
import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; 
//private static final int RESULT_OK = -1; 
private static final int MEDIA_TYPE_IMAGE = 1; 

public static Bundle s = null; 
//public static String y ; 
private Uri fileUri; 
private static Intent intent; 
private static Intent intent2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

     // create Intent to take a picture and return control to the calling application 
    intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image 
    intent.putExtra(android.provider.MediaStore.ACTION_IMAGE_CAPTURE, fileUri); // set the image file name 

    // start the image capture Intent 
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 
    //onActivityResult(CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE, int resultCode, intent) 
} 


private Uri getOutputMediaFileUri(int type) { 
    // TODO Auto-generated method stub 
     return Uri.fromFile(getOutputMediaFile(type)); 
} 

/** Create a File for saving an image or video */ 
@SuppressLint("SimpleDateFormat") 
private static File getOutputMediaFile(int type){ 
    // To be safe, you should check that the SDCard is mounted 
    // using Environment.getExternalStorageState() before doing this. 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "IWMP-Images"); 
    // This location works best if you want the created images to be shared 
    // between applications and persist after your app has been uninstalled. 

    // Create the storage directory if it does not exist 
    if (! mediaStorageDir.exists()){ 
     if (! mediaStorageDir.mkdirs()){ 
      Log.d("IWMP-Images", "failed to create directory"); 
      return null; 
     } 
    } 

    // Create a media file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date()); 
    File mediaFile; 
    if (type == MEDIA_TYPE_IMAGE){ 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "IMG_"+ timeStamp + ".jpg"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) 
@Override 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      // Image captured and saved to fileUri specified in the Intent 
      Toast.makeText(this, "Image saved to:\n" + fileUri, Toast.LENGTH_LONG).show(); 
      s =data.getExtras(); 

      intent2 = new Intent(MainActivity.this,MainActivity2.class); 

      intent2.putExtra("Image", s); 

      intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      getApplicationContext().startActivity(intent2); 



     } else if (resultCode == RESULT_CANCELED) { 
      // User cancelled the image capture 
     } else { 
      // Image capture failed, advise user 
      Toast.makeText(this, "Image NOT saved ", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

    } 

` 

из этого я сохранения данных (Intent) в расслоении S и отправив его на activty2

мой деятельности2 код

package com.example.iwm; 

    import android.os.Bundle; 
    import android.app.Activity; 
    import android.graphics.Bitmap; 

    import android.view.Menu; 
    import android.view.View; 
    import android.widget.ImageView; 
    import android.widget.TextView; 

public class MainActivity2 extends Activity { 
TextView tx; 
Bitmap bmp; 
ImageView ivUserImage; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_activity2); 
    ivUserImage = (ImageView)findViewById(R.id.image); 
    tx = (TextView)findViewById(R.id.text1); 
    //tx.setText(MainActivity.y); 
Bundle bundle = getIntent().getExtras(); 
try 
{ 
bmp =(Bitmap)bundle.get("Image"); 

} 
catch(Exception e) 
{ 
    tx.setText(e.toString()); 
} 
ivUserImage.setImageBitmap(bmp); 
//int i=10; 
} 


public void upload(View view) 
{ 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main_activity2, menu); 
    return true; 
} 

    } 
+0

разместить Ваш StackTrace – Raghunandan

+0

Ваш отправляете сверток, хотя намерения вместо Bitmap: 'ы = data.getExtras();' 'intent2.putExtra ("Image", с),' Использование: ' Умножать («данные»)) – andrew

+0

andrew_pako .. при использовании .. intent2.putExtra («Image», s.get («data»)). Метод putExtra (String) , boolean) в типе Intent не применим для аргументов (String, Object) .. означает s.get ("data") .. дает логическое значение. – yug

ответ

1

и можно попробовать, как это

получить изображение путь после u взято с камеры как это

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
    if (resultCode == RESULT_OK) { 

final String[] imageColumns = { MediaStore.Images.Media._ID, 
      MediaStore.Images.Media.DATA }; 
    final String imageOrderBy = MediaStore.Images.Media._ID + " DESC"; 
    Cursor imageCursor = managedQuery(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, 
      null, null, imageOrderBy); 
    if (imageCursor.moveToFirst()) { 

     String pathoflasttakenimage = imageCursor.getString(imageCursor 
       .getColumnIndex(MediaStore.Images.Media.DATA)); 
    } 
} 

проходят этот ImagePath в пачке, как этот

Intent intent = new Intent(MainActivity.this, MainActivity2.class); 



    Bundle bundle = new Bundle(); 
    bundle.putString("path", pathoflasttakenimage); 

    intent.putExtras(bundle); 

    startActivity(intent); 

в других целях деятельности этой ImagePath, чтобы показать изображение в ImageView как этот

Bundle b = getIntent().getExtras(); 
    String path = b.getString("path"); 

    BitmapFactory.Options opts = new BitmapFactory.Options(); 
     opts.inSampleSize = 2; // for 1/2 the image to be loaded 
     Bitmap thumb = Bitmap.createScaledBitmap(
       BitmapFactory.decodeFile(path, opts), 96, 96, false); 
     ivUserImage.setImageBitmap(thumb); 

позволяют сказать мне, что проблема в этом случае у лицу.

+0

В моем комплекте хранится намерение правильно. do im, отправляющий весь код. PLZ проверить, где я делаю это неправильно. спасибо, – yug

+0

ive также попытался Bitmap bitmap = BitmapFactory.decodeFile (MainActivity.fileUri.toString()); \t \t \t ivUserImage.setImageBitmap (bitmap); но это тоже givin bitmap = null. где мой файлUri имеет правильный путь – yug

+0

есть u объявлен fileUri как статический – Senthil

0

bundle.get("data") вместо bundle.get("Image") для получения растрового изображения из Bundle в Second Activity. попробуйте как:

Bundle bundle = getIntent().getExtras(); 
try 
{ 
     // getting error here. 
    bmp = (Bitmap)bundle.get("data"); //<< use data instead of Image 
    ivUserImage.setImageBitmap(bmp); 
} 
catch(Exception e) 
{ 
    tx.setText(e.toString());} 
} 
+0

до (Bitmap) bundle.get ("data"); .. i m получает этот Bundle [{Image = Bundle [mParcelledData.dataSize = 76944]}] на отладчике, bt bmp по-прежнему null .. ?? нет изображения на изображении. !!! ive отправил весь мой код PLZ проверить, если возможно .. спасибо – yug

+0

i thnk может быть sumwhere, где выкладывается линия, мое изображение не сохраняется в комплекте, вы получаете его на SD-карте.: P – yug

+0

ive также попытался Bitmap bitmap = BitmapFactory .decodeFile (MainActivity.fileUri.toString()); \t \t \t ivUserImage.setImageBitmap (bitmap); но это тоже givin bitmap = null. где мой файлUri имеет правильный путь – yug

Смежные вопросы