2015-08-16 23 views
5

Próbowałem ustawić domyślną tapetę za pomocą przycisku, ale z jakiegoś powodu, gdy ustawiłem InputStream w Method OnCreate, otrzymuję ten błąd "oczekiwany zasób typu raw". Odwołuję się do folderu do rysowania i używając obrazu icon.png, który znajduje się w folderze do rysowania. Śledziłem tutoriale z serii NewBoston i wygląda na to, że działa dobrze dla Travis, ale z jakiegoś powodu mój nie działa w Android Studio. Jaki może być błąd? DziękiDlaczego pojawia się ten błąd "Oczekiwany zasób typu raw" w 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); 

     } 
    } 
} 

Obrazek:

Image

+0

Rozważmy [to] (http://stackoverflow.com/questions/25572647/android-openrawresource-nie-działa-do-losowania). – DSlomer64

Odpowiedz

22

Błąd wystąpił, ponieważ Android Studio oczekuje plik zasobów typu surowca.

Rozwiązanie 1:

Utwórz nowy folder w folderze „res” o nazwie „surowe” i umieścić tam swoją ikonę. Folder raw powinien zawierać wszystkie pliki multimedialne Twojej aplikacji.

Następnie zastąpić

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

z

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

Rozwiązanie 2:

Innym rozwiązaniem jest zrobić to w ten sposób. To nie wymaga, aby utworzyć surowego folder:

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

Jakiekolwiek wyjaśnienie, dlaczego tak się dzieje? –

+0

@OndrejTokar Zaktualizowałem moją odpowiedź z powodu. Proszę sprawdź to. –

+3

@HusseinElFeky dlaczego "+ R.drawable.icon" rozwiązać problem? Dzięki! – newbyca

10

Wymień

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

Z

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