【问题标题】:Android || How to parse the Image from one activity to another?安卓||如何将图像从一个活动解析到另一个活动?
【发布时间】:2017-01-23 07:50:20
【问题描述】:

这是我的代码。我想在此处再添加一个按钮,单击该按钮将图像发送到下一个活动,但我无法配置它。我该怎么做?

public class MainActivity extends Activity {
private static int RESULT_LOAD_IMG = 1;
String imgDecodableString;

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

public void loadImagefromGallery(View view) {
    // Create intent to Open Image applications like Gallery, Google Photos
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    // Start the Intent
    startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        // When an Image is picked
        if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
                && null != data) {
            // Get the Image from data

            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            // Get the cursor
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            // Move to first row
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imgDecodableString = cursor.getString(columnIndex);
            cursor.close();
            ImageView imgView = (ImageView) findViewById(R.id.imgView);
            // Set the Image in ImageView after decoding the String
            imgView.setImageBitmap(BitmapFactory
                    .decodeFile(imgDecodableString));

        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }

}

【问题讨论】:

  • 将文件名传递给下一个Activity。
  • 您已经有包含图片的字符串,只需使用额外的意图发送即可
  • 我编写了使用 Intent extre 发送的代码,但如何在下一个活动中获取它 public void nextActivity(View view){ Intent intent= new Intent(this, DisplayActivity.class); intent.putExtra("bmp_image",imgDecodableString);开始活动(意图); }

标签: android parsing


【解决方案1】:

最初,在获取图像字符串启用按钮后保持新添加的按钮禁用并在onActivityResult方法中并将onClickListener设置为按钮。并使用额外的意图将该图像字符串传递给下一个活动。

onActivityResult方法中,

newButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getApplicationContext(),NextActivity.class).putExtra("img",imgDecodableString));
            }
        });

【讨论】:

  • 我实现了你的代码......并跳转到下一个活动并在那里获得空白页......在 logcat 我得到这个...... ** 关键 img 预期 Parcelable但值是 java.lang.String。返回默认值 。 W/Bundle:尝试转换生成的内部异常:**
  • 你如何在下一个活动中获取字符串你在下一个活动中编写了什么代码?
  • 这是下一个活动的代码---------------------------------> _ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);位图 imgDecodeableString =(Bitmap)this.getIntent().getParcelableExtra("img"); setContentView(R.layout.activity_display); ImageView imgView = (ImageView) findViewById(R.id.imageView); imgView.setImageBitmap(imgDecodeableString); } }
  • 替换onCreate方法中的代码 String imgDecodeableString =(String)this.getIntent().getStringExtra("img"); setContentView(R.layout.activity_display); ImageView imgView = (ImageView) findViewById(R.id.imageView); imgView.setImageBitmap(BitmapFactory .decodeFile(imgDecodeableString));
  • 谢谢兄弟!!你救我!!我从昨天开始受苦,现在我得到了解决方案!非常感谢你帮助我......来自印度的爱兄弟
【解决方案2】:

对大图像执行此操作的最佳方法是使用 Serializable,因为 Intent 和 Parcelable 都有大小限制。

这个问题的答案可能会有所帮助:Serializing and De-Serializing android.graphics.Bitmap in Java

【讨论】:

    【解决方案3】:

    您可以将数据放入您的第一个活动中,例如

    Intent intent = new Intent(this, NewActivity.class);
    intent.putExtra("BitmapImage", bitmap);
    

    在第二个活动中解析如下数据:

    Intent intent = getIntent();
    Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
    

    将您的图像路径转换为位图代码截断是:

    BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);
    

    【讨论】:

    • 如果您不理解正确的解决方案。不要奉献。如果您想为图像放置数据,则意图只能具有从一个活动到另一个活动的原始数据类型,您必须将其转换为位图并在上面解释它,如果您不感兴趣,请不要投入它。谢谢!!
    • 没关系,但你必须解决它。如果您的图像尺寸较小,它将起作用。
    • 我正在从图库中选择图像,并且此方法不起作用错误显示 Key bmp_image 预期 Parcelable 但值是 java.lang.String。返回默认值
    • 您必须将您选择的图像文件转换为位图并放入意图。将图像转换为位图。
    【解决方案4】:

    //第一个活动

    Bitmap b = null;
    String bitmapString = getStringFromBitmap(b);
    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("bitmapString", bitmapString);
    

    //第二个活动

    String receivedBitmapString = getIntent().getStringExtra("bitmapString");
            Bitmap receivedBitmap = getBitmapFromString(receivedBitmapString);
    

    //函数

     private String getStringFromBitmap(Bitmap bitmapPicture) {
         /*
         * This functions converts Bitmap picture to a string which can be
         * JSONified.
         * */
         final int COMPRESSION_QUALITY = 100;
         String encodedImage;
         ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream();
         bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY,
         byteArrayBitmapStream);
         byte[] b = byteArrayBitmapStream.toByteArray();
         encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
         return encodedImage;
         }
    
    
        private Bitmap getBitmapFromString(String jsonString) {
        /*
        * This Function converts the String back to Bitmap
        * */
        byte[] decodedString = Base64.decode(stringPicture, Base64.DEFAULT);
        Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
        return decodedByte;
        }
    

    来源:Link

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多