如何将图像从drawable添加到gmail?

我试图从我的GridView的图像附加到Gmail或Facebook,但每当我试图附加我的应用程序崩溃,我得到以下错误与nullpointerexception,下面是我的代码与gridview图像select,任何一个可以帮助吗?

public class Free_Cover_Activity extends AppCompatActivity { GridView grid; int[] imageId = { R.drawable.discovercover, R.drawable.burpresswordfree, R.drawable.flyfree, R.drawable.cantmovefree, R.drawable.cantmovewordfree, R.drawable.chalkthisfree, R.drawable.fivehundredmetersfree, R.drawable.freeexercise, R.drawable.gym_smilie, R.drawable.hundredcalrairesfree, R.drawable.injuryfree, R.drawable.jumpropefree, R.drawable.nicesnathcfree, R.drawable.personglrecordfree, R.drawable.posefree, R.drawable.pushupfree, R.drawable.shoulder, R.drawable.timewordfree, R.drawable.unbrokernfree, R.drawable.weightbeltfree }; private Bitmap mBitmap; private Intent email; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.free_cover_gridview); android.support.v7.app.ActionBar abar = getSupportActionBar(); ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#D64365")); abar.setBackgroundDrawable(colorDrawable); abar.hide(); CustomGridFreeCover adapter = new CustomGridFreeCover(Free_Cover_Activity.this, imageId); grid=(GridView)findViewById(R.id.freecover_grid); grid.setAdapter(adapter); grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { try { Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.discovercover); /* replace "R.drawable.bubble_green" with the image resource you want to share from drawable */ ByteArrayOutputStream bytes = new ByteArrayOutputStream(); largeIcon.compress(Bitmap.CompressFormat.JPEG, 40, bytes); //you can create a new file name "test.jpg" in sdcard folder. File f = new File(Environment.getExternalStorageDirectory() + File.separator + "test.jpg"); f.createNewFile(); //write the bytes in file FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); //remember close de FileOutput fo.close(); } catch (IOException e) { //TODO Auto-generated catch block e.printStackTrace(); } Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); //set your subject shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hi"); //set your message shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "How are you"); String imagePath = Environment.getExternalStorageDirectory() + File.separator + "test.jpg"; File imageFileToShare = new File(imagePath); Uri uri = Uri.fromFile(imageFileToShare); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(shareIntent, "Share Image")); } }); } public class CustomGridFreeCover extends BaseAdapter { private Context mContext; //private final String[] web; private final int[] Imageid; public CustomGridFreeCover(Context c,int[] Imageid ) { mContext = c; this.Imageid = Imageid; //this.web = web; } @Override public int getCount() { //TODO Auto-generated method stub return Imageid.length; } @Override public Object getItem(int position) { //TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { //TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //TODO Auto-generated method stub View grid; LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null) { grid = new View(mContext); grid = inflater.inflate(R.layout.free_cover_griditem, null); //TextView textView = (TextView) grid.findViewById(R.id.grid_text); ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image_freecover); //textView.setText(web[position]); imageView.setImageResource(Imageid[position]); } else { grid = (View) convertView; } return grid; } } } 

这是您需要的工作代码:

首先将图像从Drawable保存到SD Card这里是代码:

 try{ Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.bubble_green); //replace "R.drawable.bubble_green" with the image resource you want to share from drawable ByteArrayOutputStream bytes = new ByteArrayOutputStream(); largeIcon.compress(Bitmap.CompressFormat.JPEG, 40, bytes); // you can create a new file name "test.jpg" in sdcard folder. File f = new File(Environment.getExternalStorageDirectory() + File.separator + "test.jpg"); f.createNewFile(); // write the bytes in file FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); // remember close de FileOutput fo.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

然后从SD card获取保存的图像,并附加在电子邮件的意图是这样的:

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hi"); //set your subject shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "How are you"); //set your message String imagePath = Environment.getExternalStorageDirectory() + File.separator + "test.jpg"; File imageFileToShare = new File(imagePath); Uri uri = Uri.fromFile(imageFileToShare); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(shareIntent, "Share Image")); 

这对我来说是完美的。

  Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getResources().getString(R.string.share_subject)); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, getResources().getString(R.string.share_message)); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://" + C.PROJECT_PATH + "/drawable/" + R.drawable.image_to_share); startActivity(Intent.createChooser(shareIntent, "Share Image")); 

但是我会一直推荐从这个资源中解码一个Bitmap ,将它保存为一个File在存储器中,然后使用该文件。 从资源直接使用更可靠的方式。

罗马的东西是你传递一个空的位图对象

  Bitmap icon = mBitmap; 

你需要先分配位图,然后代码才能开始工作

欲了解更多信息,你可以看看下面的链接: –

https://github.com/codepath/android_guides/wiki/Sharing-Content-with-Intents

http://developer.android.com/training/sharing/send.html

首先将您的drwable转换成图像并将其存储在SDCard上

存储可绘制到SD卡


然后

 private void shareImage() { Intent share = new Intent(Intent.ACTION_SEND); // setType("image/png"); OR for jpeg: setType("image/jpeg"); share.setType("image/*"); // Make sure you put example png image named yourImg.png in your // directory String imagePath = Environment.getExternalStorageDirectory() + "/yourImg.png"; File imageFileToShare = new File(imagePath); Uri uri = Uri.fromFile(imageFileToShare); share.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(share, "Share Image!")); }