10

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:

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

        }
    }
}

Image:

Image

Hussein El Feky
  • 6,627
  • 5
  • 44
  • 57
Missy Zewdie
  • 231
  • 2
  • 9
  • 17
  • Consider [this](http://stackoverflow.com/questions/25572647/android-openrawresource-not-working-for-a-drawable) – DSlomer64 Aug 16 '15 at 18:32

3 Answers3

33

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

Solution 1:

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.

Then replace

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

with

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

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);
Community
  • 1
  • 1
Hussein El Feky
  • 6,627
  • 5
  • 44
  • 57
12

Replace

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

With

InputStream is = getResources().openRawResource(+ R.drawable.icon);
Pavlo Zin
  • 762
  • 6
  • 25
1

Let's look at documentation for openRawResource

Open a data stream for reading a raw resource. This can only be used with resources whose value is the name of an asset files -- that is, it can be used to open drawable, sound, and raw resources; it will fail on string and color resources.

So the solution - leave it as it is, i. e.

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

The inspection in Android Studio is just wrong. You can add

@SuppressWarnings("ResourceType")

to hide the error.

Note

Using + R.drawable.icon just fools the inspection, because it can no longer determine which kind of resource it is.

Lev Leontev
  • 2,538
  • 2
  • 19
  • 31