2015-08-16 15 views
5

Stavo cercando di impostare lo sfondo predefinito utilizzando un pulsante, ma per qualche motivo quando imposto InputStream nel metodo OnCreate, ottengo questo errore "risorsa prevista di tipo raw". Sto facendo riferimento alla cartella drawable e usando l'immagine icon.png che si trova nella cartella drawable. Stavo seguendo i tutorial della NewBoston Series e sembra funzionare bene per Travis, ma per qualche ragione il mio non funziona in Android Studio. Quale potrebbe essere l'errore? GraziePerché viene visualizzato questo errore "Risorsa prevista di tipo non elaborata" in 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); 

     } 
    } 
} 

Immagine: Si è verificato

Image

+0

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

risposta

22

L'errore perché Android Studio prevede un file di risorse di tipo grezzo.

Soluzione 1:

Creare una nuova cartella nella cartella "res" chiamato "raw", e mettere la vostra icona di lì. La cartella raw dovrebbe contenere tutti i tuoi file multimediali della tua app.

quindi sostituire

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

con

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

Soluzione 2:

Un'altra soluzione è quella di fare in questo modo. Questo non richiede di creare una cartella grezzo:

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

Qualche spiegazione del motivo? –

+0

@OndrejTokar Ho aggiornato la mia risposta con il motivo. Per favore controllalo. –

+3

@HusseinElFeky perché '+ R.drawable.icon' risolve il problema? Grazie! – newbyca

10

Sostituire

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

Con

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