2013-07-19 3 views
0

내 앱에 텍스트가있는 이미지 뷰 페이지가 포함되어 있습니다. 이미지를 SD에 저장하려고 시도하지만 버튼을 강제로 닫기를 누르면 이미지가 저장됩니다. 그 어떤 도움을 주셔서 감사합니다.viewpager로 이미지를 SD에 저장

ImagePager

public class ImagePager extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra, stringArray); 

    ViewPager myPager = (ViewPager) findViewById(R.id.myimagepager); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(0);} 

private int imageArra[] = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; 


private String[] stringArray = new String[] { "Image a", "Image b","Image c","Image d","Image e"}; 
} 

ImagePagerAdapter

public class ImagePagerAdapter extends PagerAdapter { 

Activity activity; 
int imageArray[]; 
String[] stringArray; 

public ImagePagerAdapter(Activity act, int[] imgArra, String[] stringArra) { 
    imageArray = imgArra; 
    activity = act; 
    stringArray = stringArra;} 

public int getCount() { 
    return imageArray.length;} 

public Object instantiateItem(View collection, final int position) { 
    LayoutInflater inflater = (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.custom_pager, null); 

    final ImageView im=(ImageView) layout.findViewById(R.id.myimage);    
    im.setImageResource(imageArray[position]); 

    TextView txt=(TextView) layout.findViewById(R.id.image_text); 
    txt.setText(stringArray[position]); 
    ((ViewPager) collection).addView(layout, 0); 

    Button button=(Button)layout.findViewById(R.id.button_save); 

    button.setOnClickListener(new OnClickListener() { 

    private Bitmap bm; 
    private String PREFS_NAME; 
    private Context mContext; 
public void onClick(View arg0) { 
String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/saved_images"); 
    if(!myDir.exists()){ 
     myDir.mkdirs(); 
     } 
    bm = BitmapFactory.decodeResource(mContext.getResources(), imageArray[position]); 
    im.setImageBitmap(bm); 
    SharedPreferences savedNumber = mContext.getSharedPreferences(PREFS_NAME, 0); 
    int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
    lastSavedNumber++; 
    String fname = "Image-"+lastSavedNumber+".png"; 
    File file = new File (myDir, fname); 
    if (file.exists()) {file.delete(); 
    } 
    try { 
    FileOutputStream out = new FileOutputStream(file); 
    bm.compress(Bitmap.CompressFormat.PNG, 100, out);//Your Bitmap from the resouce 
    out.flush(); 
    out.close(); 
    } 
    catch (Exception e) { 
    e.printStackTrace(); 
    }  
    SharedPreferences saveNumber = mContext.getApplicationContext().getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editorset = saveNumber.edit(); 
    editorset.putInt("lastsavednumber",lastSavedNumber); 
    editorset.commit(); 
     Toast.makeText(mContext, "Image Saved", Toast.LENGTH_SHORT). show();}}); 

     return layout; } 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 
} 

로그 캣 :

java.lang.NullPointerException 
at com.test.demo.ImagePagerAdapter$1.onClick(ImagePagerAdapter.java:61) 
at android.view.View.performClick(View.java:2485) 
at android.view.View$PerformClick.run(View.java:9080) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3687) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
at dalvik.system.NativeStart.main(Native Method) 
+0

는 @Pulkit 세티 이미 내가 허락 –

+0

에 쓰기 위해 추가 권한를 havent 수 caould, 로그를하시기 바랍니다 추가합니다. 하지만 그곳에서 중단 점을 확인하고 –

+0

Pulkit 세티을 추가 SD 카드 –

답변

0

당신은 설정하지 mContex t를 임의의 값으로 설정하면 기본값은 null입니다. 활동에 지정하십시오.

+0

그것을하는 방법 –

+0

개인 문맥 mContext를 제거하십시오; 그런 다음 mContext가있는 모든 곳에서 활동으로 바꿉니다. – user1132959