2013-02-04 5 views
0

여러 이미지를 선택하고 sdcard 폴더에 저장할 수있는 안드로이드 응용 프로그램을 개발하고 싶습니다. 여러 개의 파일을 선택할 수 있지만 그들을 sdcard 폴더에 저장하고 싶을 때 이미지 이름 만 있습니다. GridView를 사용하여 이미지를 보여 주려고했지만 이미지가 없다는 것을 이해했습니다. 여기에 내 코드 ..... 내가 problem.Thanks를 해결할 수있는 방법을안드로이드의 sdcard 폴더에 이미지 추가

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.image_selection); 

    Bundle b=getIntent().getExtras(); 
    directoryName=b.getString("key"); 

    final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }; 
    final String orderBy = MediaStore.Images.Media._ID; 
    Cursor imagecursor = managedQuery(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
      null, orderBy); 
    int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID); 
    this.count = imagecursor.getCount(); 
    this.thumbnails = new Bitmap[this.count]; 
    this.arrPath = new String[this.count]; 
    this.thumbnailsselection = new boolean[this.count]; 
    for (int i = 0; i < this.count; i++) { 
     imagecursor.moveToPosition(i); 
     int id = imagecursor.getInt(image_column_index); 
     int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA); 
     thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
       getApplicationContext().getContentResolver(), id, 
       MediaStore.Images.Thumbnails.MICRO_KIND, null); 
     arrPath[i]= imagecursor.getString(dataColumnIndex); 
    } 
    GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
    imageAdapter = new ImageAdapter(); 
    imagegrid.setAdapter(imageAdapter); 
    imagecursor.close(); 

    final Button selectBtn = (Button) findViewById(R.id.selectBtn); 
    selectBtn.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 
      final int len = thumbnailsselection.length; 
      int cnt = 0; 
      String selectImages = ""; 
      for (int i =0; i<len; i++) 
      { 
       if (thumbnailsselection[i]) 
       { 
        cnt++; 
        selectImages = selectImages + arrPath[i] + "|"; 
        String sendString=extractString(arrPath[i]); 
        saveImageToSdCard(sendString,arrPath[i]); 
        Toast.makeText(getApplicationContext(), 
          sendString, 
          Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
    }); 
} 

public String extractString(String myString) 
{ 
    String finalString=""; 
    int index = 0; 
    int count=0; 
    char newCharacter[]=new char[50]; 
    char[] charArray = myString.toCharArray(); 
    int length=myString.length(); 
    for (int i = 0; i < length; i++) 
    { 
     char charString=charArray[i]; 
     if(charString=='/') 
     { 
      index=i; 
     } 
    } 

    for (int i = index+1; i < length; i++) 
    { 
     newCharacter[count]=charArray[i]; 
     count++; 
    } 

    finalString=String.valueOf(newCharacter); 
    return finalString; 
} 

public void saveImageToSdCard(String imageName, String fullPath) 
{ 
    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root +"/"+directoryName); 
    String fname = imageName; 
    final File file = new File (myDir, fname); 
    if (file.exists())file.delete(); 

    try 
    { 
     final Bitmap myBitmap=BitmapFactory.decodeFile(fullPath); 
     new Thread() { 
      public void run() 
      { 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       if (myBitmap != null) 
       { 
        myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
       } 
       try { 
        if (file.createNewFile()) { 
         // 
        } else { 

         // 
        } 

        FileOutputStream fo; 
        fo = new FileOutputStream(file); 
        fo.write(bytes.toByteArray()); 

        fo.flush(); 
        fo.close(); 
        // result.recycle(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }.start(); 
     FileOutputStream stream=new FileOutputStream(file); 

     myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream); 
     stream.flush(); 
     stream.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 

    public ImageAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() { 
     return count; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(
        R.layout.galleryitem, null); 
      holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
      holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 

      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.checkbox.setId(position); 
     holder.imageview.setId(position); 
     holder.checkbox.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       CheckBox cb = (CheckBox) v; 
       int id = cb.getId(); 
       if (thumbnailsselection[id]){ 
        cb.setChecked(false); 
        thumbnailsselection[id] = false; 
       } else { 
        cb.setChecked(true); 
        thumbnailsselection[id] = true; 
       } 
      } 
     }); 
     holder.imageview.setOnClickListener(new OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       // TODO Auto-generated method stub 
       int id = v.getId(); 
       Intent intent = new Intent(); 
       intent.setAction(Intent.ACTION_VIEW); 
       intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*"); 
       startActivity(intent); 
      } 
     }); 
     holder.imageview.setImageBitmap(thumbnails[position]); 
     holder.checkbox.setChecked(thumbnailsselection[position]); 
     holder.id = position; 
     return convertView; 
    } 
} 
class ViewHolder 
{ 
    ImageView imageview; 
    CheckBox checkbox; 
    int id; 
} 

은 ...입니다

+0

기기가 마운트되지 않았습니까? 실제 장치를 사용하고 장착 된 경우 이미지를 SD 카드에 저장할 수 없습니다. 에뮬레이터를 사용하고 있다면 이미지 저장에 문제가 있습니다. 마운트되지 않은 sd 카드가있는 실제 장치를 사용하십시오. –

+0

에뮬레이터를 사용 중입니다. – andDev

+0

실제 장치를 사용해보십시오. 나는 에뮬레이터가 범인이라고 여기다. 에뮬레이터에서 SD 카드를 지원하고 충분한 저장 용량을 제공 했습니까? –

답변

0

이 비슷한 이미 대답 질문이 보인다

How to get path by MediaStore.Images.Media

해결책은 대답의 첫 번째 주석에 있습니다.

+0

경로가 있지만 sdcard 폴더에 이미지를 저장할 수 없습니다. – andDev

+0

이미지 이름 만 저장합니다. sdcard에서 볼 수 있습니다. – andDev

관련 문제