2015-08-16 7 views
5

Ich habe versucht, das Standard-Hintergrundbild mithilfe einer Schaltfläche zu setzen, aber aus irgendeinem Grund, wenn ich den InputStream in der OnCreate-Methode setze, erhalte ich die Fehlermeldung "erwartete Ressource vom Typ Raw". Ich verweise auf den ziehbaren Ordner und verwende das Bild icon.png, das sich im ziehbaren Ordner befindet. Ich habe die Tutorials in der NewBoston-Serie verfolgt und es scheint für Travis gut zu funktionieren, aber aus irgendeinem Grund funktioniert meine nicht in Android Studio. Was könnte der Fehler sein? DankWarum erhalte ich in Android Studio den Fehler "Erwartete Ressource vom Typ Raw"?

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

+0

Betrachten Sie [diese] (http://stackoverflow.com/questions/25572647/android-openrawresource-not-working-for-a-drawable) – DSlomer64

Antwort

22

Der Fehler trat auf, weil Android Studio raw eine Ressource-Datei des Typs erwartet. 1

Lösung:

Erstellen Sie einen neuen Ordner in Ihrem "res" Ordner "raw" genannt, und Ihr Symbol dort setzen. Der rohe Ordner sollte alle Ihre Mediendateien Ihrer App enthalten.

Eine andere Lösung ist es, wie dies zu tun:

Dann

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

mit

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

Lösung 2 ersetzen. Dies erfordert Sie keine rohen Ordner zu erstellen:

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

+1

Jede Erklärung, warum das passiert? –

+0

@OndrejTokar Ich habe meine Antwort mit dem Grund aktualisiert. Überprüfen Sie bitte das. –

+3

@HusseinElFeky Warum behebt '+ R.drawable.icon' das Problem? Vielen Dank! – newbyca

10

ersetzen

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

Mit

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