2012-05-10 8 views
0

RelativeLayout의 스크린 샷을 찍고 있지만 오류가 발생합니다.스크린 샷을 찍는 방법?

오류 :

05-10 17:43:44.249: ERROR/AndroidRuntime(7721): Caused by: java.lang.NullPointerException 
05-10 17:43:44.249: ERROR/AndroidRuntime(7721):  at android.graphics.Bitmap.createBitmap(Bitmap.java:358) 
05-10 17:43:44.249: ERROR/AndroidRuntime(7721):  at com.API.Connect.share(FacebookConnect.java:110) 

코드 :

public class Connect extends Activity implements LoginListener { 

    public static String news = " "; 

    RelativeLayout bitmapimage; 

    Bitmap bitmap; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.image); 
     bitmapimage = (RelativeLayout) findViewById(R.id.bitmapimg); 
     TextView txtlove = (TextView) findViewById(R.id.txtlove); 
     txtlove.setText(news.toString()); 
     share(); 

    } 

    public void share() { 

     View v1 = bitmapimage; 
     v1.setDrawingCacheEnabled(true); 

     bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 

     v1.setDrawingCacheEnabled(false); 

     saveImage(); 

     // TODO Auto-generated method stub 

    } 

    void saveImage() { 
     String state = Environment.getExternalStorageState(); 
     Environment.MEDIA_MOUNTED.equals(state); 

     File myDir = new File("/mnt/sdcard/DCIM/Camera"); 
     myDir.mkdirs(); 

     String fname = "mytry.jpg"; 
     File file = new File(myDir, fname); 
     if (file.exists()) 
      file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      // create a Bitmap object from our image path. 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      out.flush(); 
      out.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Nidhi이 [링크] [1]을 팔로우하십시오. 그것이 당신에게 도움이되기를 바랍니다. [1] : http://stackoverflow.com/questions/7762643/android-take-screen-shot-programatically – vikky

답변

5

올바른 것입니다. 하지만 onCreate()에서 뷰가 그려지지 않았을 것입니다. 그냥 부풀려있어. 따라서 아래의 방법을 사용해보십시오. 이걸 시험해 봐.

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    super.onWindowFocusChanged(hasFocus); 
    share(); //Call your share() here. 
} 

이 메서드는 뷰를 그린 후에 호출되므로이 메서드를 재정 의하여 비트 맵을 가져올 수 있습니다.

1

난 내가 당신의 오류를 발견 한 것 같아요. getdrawingcache는 이미 비트 맵을 반환하므로 nullpointer 예외가 발생하는 새 테이블을 만들 필요가 없습니다.

그래서 당신은

bitmap = v1.getDrawingCache();

대신

bitmap = Bitmap.createBitmap(v1.getDrawingCache());

이 작동하는지 알려 시도해야합니다.

접견, Wottah 당신이 뭘 하려는지

+0

답변 해 주셔서 감사합니다. – nshah

관련 문제