【问题标题】:want to transfer the image from one activity to another想要将图像从一个活动转移到另一个活动
【发布时间】:2018-02-04 20:27:53
【问题描述】:

在这里,我有两个Activity。在第一个活动中,我想从图库中选择一个图像并将该图像传输到第二个活动并设置该活动的图像视图。

我有意将图像的路径转移到另一个活动,但它不适用于所有图像。我只能从图库中获取一些图像,对于某些图像,它会关闭我的应用程序或什么都不显示并返回第一个活动。

如何改进我的代码以适用于所有图像。我检查了很多次,我认为问题在于传输文件路径并将其放入另一个活动中。

我的第一个活动:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button choose;
    private Bitmap bitmap;

    private int PICK_IMAGE_REQUEST = 1;

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

        choose = (Button) findViewById(R.id.choose);
        choose.setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        if (view == choose) {
            showFileChooser();
        }
    }

    private void showFileChooser() {


        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri filePath = data.getData();


            try {
                //Getting the Bitmap from Gallery
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                Intent i = new Intent(getApplicationContext(), SecondActivity.class);
                i.putExtra("picture", bitmap);
                startActivity(i);
                } 
            catch (IOException e) {
                e.printStackTrace();


            }
        }

    }
}

我的第二个活动

public class SecondActivity extends AppCompatActivity implements View.OnClickListener {

    ImageView image;
    Button upload;

    Bitmap bitmap;

    SharedPreferences sp;
    String rollno;

    private String UPLOAD_URL ="http://aptronnoida.com/applock/image_insert.php";


        private String KEY_Rollno = "rollno";
        private String KEY_IMAGE = "image";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
         image=(ImageView)findViewById(R.id.image);

         bitmap= getIntent().getParcelableExtra("picture") ;
         image.setImageBitmap(bitmap);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        upload = (Button) findViewById(R.id.upload);
        upload.setOnClickListener(this);
        sp=getSharedPreferences("rajput",MODE_PRIVATE);
        rollno=sp.getString("rollno",null);
    }



    @Override
    public void onClick(View view) {
        if(view == upload){
          uploadImage();
         }
    }

      public String getStringImage(Bitmap bmp){
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
       }

    private void uploadImage() {

        final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
    @Override
            public void onResponse(String s) {
                 //Disimissing the progress dialog
                      loading.dismiss();
                       //Showing toast message of the response
                      Toast.makeText(SecondActivity.this, s , Toast.LENGTH_LONG).show();
                      }
                    },
                    new Response.ErrorListener() {
                       @Override
                      public void onErrorResponse(VolleyError volleyError) {
                          //Dismissing the progress dialog
                   loading.dismiss();

                        //Showing toast
                         Toast.makeText(SecondActivity.this, "Error", Toast.LENGTH_LONG).show();
            }
             }){
              @Override
               protected Map<String, String> getParams() throws AuthFailureError {
                  //Converting Bitmap to String
                  String image = getStringImage(bitmap);

                //Creating parameters
                  Map<String,String> params = new Hashtable<String, String>();

              //Adding parameters
                  /*params.put(KEY_Rollno,rollno);*/
                  params.put(KEY_IMAGE, image);


                  //returning parameters
                     return params;
                    }
};

          //Creating a Request Queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

          //Adding request to the queue
          requestQueue.add(stringRequest);
    }


    @Override
    public boolean onSupportNavigateUp(){
        onBackPressed();
        return true;
    }
    public void onBackPressed(){

        super.finish();
    }


}

【问题讨论】:

  • 你在看什么错误提及错误详情
  • 我认为您应该将文件路径传递给下一个活动并在那里创建位图,您可能会因为文件大小而遇到问题

标签: android


【解决方案1】:

不传递位图,而是将filePath传递给下一个活动,并在第二个活动中生成位图并设置。

【讨论】:

    【解决方案2】:

    在位图中的第一个 MainActivity 中声明 "public static" 如下代码:

    class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        Button choose;
        public static Bitmap bitmap;
    
        private int PICK_IMAGE_REQUEST = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            choose = (Button) findViewById(R.id.choose);
            choose.setOnClickListener(this);
        }
    
    
        @Override
        public void onClick(View view) {
            if (view == choose) {
                showFileChooser();
            }
        }
    
        private void showFileChooser() {
    
    
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
                Uri filePath = data.getData();
    
    
                try {
                    //Getting the Bitmap from Gallery
                    bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                    startActivity(new Intent(getApplicationContext(), SecondActivity.class));
                    } 
                catch (IOException e) {
                    e.printStackTrace();
    
    
                }
            }
    
        }
    }
    

    和SecondActivity访问代码:

    public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
    
        ImageView image;
        Button upload;
    
        Bitmap bitmap;
    
        SharedPreferences sp;
        String rollno;
    
        private String UPLOAD_URL ="http://aptronnoida.com/applock/image_insert.php";
    
    
            private String KEY_Rollno = "rollno";
            private String KEY_IMAGE = "image";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
             image=(ImageView)findViewById(R.id.image);
    
             bitmap= MainActivity.bitmap ;
             image.setImageBitmap(bitmap);
        }
    }
    

    【讨论】:

    • 我在图片部分需要更多帮助我的项目,你能帮我个人请...紧急
    • 我可以要你的号码吗
    • 请提供您的详细信息,我会尽快与您联系。
    【解决方案3】:

    您可以将图像路径而不是整个图像传递给second activity,并在初始化时将其加载到第二个活动中。如果库的使用对您来说不是问题,您可以使用 glidepicasso 库来加载图像。

    步骤:

    1. get the path of image
    2. 保存在字符串变量中
    3. 创建一个Bundle对象,将路径字符串放入bundle中。
    4. 使用该捆绑包启动第二个活动。
    5. 在第二个活动中从包中获取路径值。 最后,
    6. 使用滑行或毕加索加载图像。

    【讨论】:

      【解决方案4】:

      对于小尺寸的图片没关系(通过位图),但对于大尺寸的图片,你需要做更多的工作...按照这个文档,它是写在文档中的。https://developer.android.com/training/camera/photobasics.html

      【讨论】:

        【解决方案5】:

        您可以将其作为字节数组传递并构建位图以显示在下一个屏幕上。访问此链接:

        how to pass images through intent?

        send Bitmap using intent Android

        【讨论】:

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