为什么收到此错误“原始类型的预期资源"?在Android Studio中?

问题描述:

我试图使用按钮设置默认墙纸,但是由于某种原因,当我在OnCreate方法中设置InputStream时,出现此错误原始类型的预期资源".我引用了drawable文件夹,并使用了drawable文件夹中的icon.png图像.我正在遵循NewBoston系列中的教程,它对于Travis似乎运行良好,但是由于某种原因,我的版本在Android Studio中不起作用.可能是什么错误?谢谢

I was trying to set the default wallpaper by using a button but for some reason when i set the InputStream in the OnCreate Method, i get this error "expected resource of type raw". I am referencing the drawable folder and using the icon.png image which is in the drawable folder. I was following the tutorials in the NewBoston Series and it seems to work fine for Travis but for some reason mine doesnt work in Android Studio. What could be the error? Thanks

Camera.java:

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);

        }
    }
}

图片:

发生此错误是因为Android Studio预期资源文件的类型为raw.

The error occurred because Android Studio expected a resource file of type raw.

在"res"文件夹中创建一个新文件夹.文件夹"raw",然后将您的图标放在此处.原始文件夹应包含您应用程序的所有媒体文件.

Create a new folder in your "res" folder called "raw", and put your icon there. The raw folder should contain all your media files of your app.

然后替换

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

使用

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


解决方案2:

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


Solution 2:

Another solution is to do it like this. This doesn't require you to create a raw folder:

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