为啥我在 Android Studio 中收到此错误“Expected resource of type raw”?

Posted

技术标签:

【中文标题】为啥我在 Android Studio 中收到此错误“Expected resource of type raw”?【英文标题】:Why am I getting this error "Expected resource of type raw" in Android Studio?为什么我在 Android Studio 中收到此错误“Expected resource of type raw”? 【发布时间】:2015-11-09 09:17:15 【问题描述】:

我试图通过使用按钮设置默认壁纸,但由于某种原因,当我在 OnCreate 方法中设置 InputStream 时,我收到此错误“预期的原始类型资源”。我正在引用可绘制文件夹并使用可绘制文件夹中的 icon.png 图像。我正在关注 NewBoston 系列中的教程,它似乎对 Travis 工作正常,但由于某种原因,我的在 android Studio 中不起作用。可能是什么错误?谢谢

Camera.java:

package com.example.user.cameraapplication;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Switch;

import java.io.IOException;
import java.io.InputStream;

/**
 * Created by user on 16-08-2015.
 */
public class Camera extends Activity implements View.OnClickListener

    ImageView iv;
    Button b1,b2;
    ImageButton img;
    Intent i;
    final static  int cameractivity = 0;
    Bitmap b;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photo);
        inititalize();
        InputStream is = getResources().openRawResource(R.drawable.icon);
        b = BitmapFactory.decodeStream(is);
    

    private void inititalize() 
        iv = (ImageView)findViewById(R.id.iView1);
        img = (ImageButton)findViewById(R.id.imgbtn);
        b1 = (Button)findViewById(R.id.btn1);
        b2 = (Button)findViewById(R.id.btn2);

        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
    

    @Override
    public void onClick(View v) 
        switch(v.getId())
            case R.id.btn1:
                try 
                    getApplicationContext().setWallpaper(b);
                 catch (IOException e) 
                    e.printStackTrace();
                
                break;
            case R.id.imgbtn:
                i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(i,cameractivity);

                break;
        
    

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK)
        
            Bundle extras = data.getExtras();
            b = (Bitmap)extras.get("data");
           iv.setImageBitmap(b);

        
    

图片:

【问题讨论】:

考虑this 【参考方案1】:

让我们看看openRawResource的文档

打开数据流以读取原始资源。这个只能用 资源的值是资产文件的名称——也就是说, 可用于打开可绘制、声音和原始资源;它会 字符串和颜色资源失败。

所以解决方案 - 保持原样,即。 e.

InputStream is = getResources().openRawResource(R.drawable.icon);

Android Studio 中的检查是错误的。你可以添加

@SuppressWarnings("ResourceType")

隐藏错误。

注意

使用+ R.drawable.icon 只会愚弄检查,因为它无法再确定它是哪种资源。

【讨论】:

【参考方案2】:

发生错误是因为 Android Studio 需要一个 raw 类型的资源文件。

解决方案 1:

在您的“res”文件夹中创建一个名为“raw”的新文件夹,并将您的图标放在那里。原始文件夹应包含您应用的所有媒体文件。

然后替换

InputStream is = getResources().openRawResource(R.drawable.icon);

InputStream is = getResources().openRawResource(R.raw.icon);

解决方案 2:

另一种解决方案是这样做。这不需要您创建原始文件夹:

InputStream is = getResources().openRawResource(+ R.drawable.icon);

【讨论】:

有什么解释为什么会这样吗? @OndrejTokar 我已经用原因更新了我的答案。请检查一下。 @HusseinElFeky 为什么 '+ R.drawable.icon' 解决了这个问题?谢谢! @newbyca 它以某种方式将可绘制文件转换为原始文件,而无需创建原始文件夹。 我认为函数openRawResource 期望int 作为参数,当我们传递R.drawable.something 时,ide 错误提示它需要原始资源,因为它能够识别它不是raw 资源。当使用+ R.drawable.something 时,它会变成int,但它无法确定int 的类型,即drawableraw【参考方案3】:

替换

InputStream is = getResources().openRawResource(R.drawable.icon);

InputStream is = getResources().openRawResource(+ R.drawable.icon);

【讨论】:

以上是关于为啥我在 Android Studio 中收到此错误“Expected resource of type raw”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Android Studio 3.3.1 的 Github 中使用 Revert 时无法回滚到某个点?

有时我在 Android Studio 中遇到谷歌地图问题,但并非总是如此。为啥?如何删除谷歌地图上方的白条?

iOS 模拟器未在 Titanium Studio 中显示

为啥android studio向模拟器发送短信

为啥 Android Studio 模拟器在横向视图中旋转时是颠倒的?

为啥我在设计查看器中的字体在 Android Studio 中是模糊的?