无法解析 putextra 方法

Posted

技术标签:

【中文标题】无法解析 putextra 方法【英文标题】:cannot resolve putextra method 【发布时间】:2019-08-01 08:48:52 【问题描述】:

我正在尝试通过 recyclerView 中的意图将图像从数组列表一个活动发送到另一个活动。但在 putextra 方法中,它显示错误,例如无法解析方法 'putextra(java.lang.string,android.widget.imageview)'

 holder.itemView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            ImageView img = images.get(position);
            Intent intent = new Intent(context,Result.class);
            intent.putExtra("Image",img);
            context.startActivity(intent);
        
    );

【问题讨论】:

我们不能使用意图传递任何视图,如果您想发送图像,那么您可以使用意图发送图像 uri、文件或 url 并在第二个活动中获取它 【参考方案1】:

您不能将 ImageView 作为额外的对象传递,您传递的对象必须是 Parcelable 或 Serialiazable。

您的 ImageView 也仅与此活动相关。如果您尝试将图像发送到另一个活动,最好发送图像的路径。

【讨论】:

你能解释一下parcelable object Zohaib 兄弟有一个图像数组列表,我想根据位置只发送一张图像,请帮助我 如果您有图像的路径或资源 ID,请改为发送。在此处阅读有关 parcelable 的信息:***.com/a/49252418/3266367 @AwaisAslam 这个 ArrayList 是从哪里加载的?这些图片来自哪里? 另外,看看this answer 发送可绘制的意图(但不推荐)【参考方案2】:

你不能直接发送image,因为intent不支持

试试这个解决方案

您可以使用ByteArray 发送image,例如

holder.itemView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            ImageView img = images.get(position);
            img.buildDrawingCache();
            Bitmap bmp = ((BitmapDrawable)img.getDrawable()).getBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            Intent intent = new Intent(this, Result.class);
            intent.putExtra("Image", byteArray);
            context.startActivity(intent);
        
    );

结果活动类

onCreate()
Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("Image");
//convert it to bitmap again
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
//set image to bitmap
image.setImageBitmap(bmp);

来源 Passing image from one activity another activity

【讨论】:

我试过了,但它在“imageView img=images.get(position)”处崩溃了应用程序 你能告诉我其他方式吗,基本上我正在尝试将选择的图像从回收站视图发送到其他活动 发布你的回收器适配器和活动类以及 POJO 类【参考方案3】:

最后我终于做到了,您只需创建一个图像数组(注意:不要创建 arrayList),以防您想在多个图像之间进行选择,并简单地将这些图像传递给一个整数。下面是代码...

public void onBindViewHolder(MyViewHolder holder, final int position)

    holder.image.setImageResource(images[position]);

    holder.itemView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 

            int img = images[position];

            Intent intent = new Intent(context,Result.class);
            intent.putExtra("Images", img);
            intent.putExtra("personName", Name);
            intent.putExtra("Gender", Gender);
            context.startActivity(intent);
        
    );

//在目标活动中

public void getdata()

    if (getIntent().getExtras() !=null) 

        gender = getIntent().getStringExtra("Gender");
        Name = getIntent().getStringExtra("personName");
        int image = getIntent().getIntExtra("Images",0);
        mytext(gender,Name,image);
    

public void mytext(String gender,String Name,int img)
    textView1 = findViewById(R.id.txt1);
    textView2 =findViewById(R.id.txt2);
    imageView = findViewById(R.id.Imagename);
    textView1.setText(Name);
    textView2.setText(gender);
    imageView.setImageResource(img);

//然后在onCreate方法中调用“getdata();”

【讨论】:

以上是关于无法解析 putextra 方法的主要内容,如果未能解决你的问题,请参考以下文章

无法解析方法'setWebChromeClient(匿名android

无法解析方法 .getFilter()

无法解析方法 getLocationSettingsStates()

无法解析方法 startActivity()

无法解析 imageView 中的方法 setText()

“无法解析方法”与 mockito