2015-08-16 19 views
5

Bir düğmeyi kullanarak varsayılan duvar kağıdını ayarlamaya çalışıyordum, ancak OnCreate Yönteminde InputStream'i ayarladığım nedenlerden dolayı bu hatayı "türün ham olması beklenen kaynak" olarak aldım. Çizilebilir klasöre başvuruyorum ve çizim klasöründe bulunan icon.png resmini kullanıyorum. NewBoston Serisindeki dersleri takip ediyordum ve Travis için iyi çalışıyor gibi görünüyor, ama nedense benimki Android Studio'da çalışmıyor. Hata ne olabilir? TeşekkürNeden Android Studio'da "raw türünde beklenen kaynak" hatası alıyorsunuz?

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

     } 
    } 
} 

Resim: Android Studio ham türde bir kaynak dosyası beklendiği çünkü

Image

+0

http://stackoverflow.com/questions/25572647 [bu] (düşünün

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

ile değiştir: Bu ham klasör oluşturmak için gerektirmez/android-openrawresource-not-working-için-çekilebilir) – DSlomer64

cevap

22

hata oluştu.

Çözüm 1:

"ham" olarak adlandırılan "res" klasöründe yeni bir klasör oluşturun ve orada simgesini koydu. Ham klasör, uygulamanızın tüm medya dosyalarınızı içermelidir.

Başka bir çözüm böyle yapmak şudur:

Sonra

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

Çözüm 2 ile

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

değiştirin.

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

+1

Bu neden olur herhangi bir açıklama? –

+0

@OndrejTokar Cevabımı neden ile güncelledim. Lütfen kontrol et. –

+3

@HusseinElFeky neden '+ R.drawable.icon' sorunu çözüyor? Teşekkürler! – newbyca

10

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