کلیدستان

نسخه‌ی کامل: مشکل در ذخیره سازی عکس در حافظه تلفن
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان. من از کد زیر برای ذخیره کردن عکس در حافظه تلفن استفاده میکنم. وقتی رو دکمه کلیک میکنم عکس به درستی تو شبیه ساز ذخیره میشه. اما فقط در شبیه ساز. ولی وقتی برنامه رو تو گوشی های متخلف نصب و تست میکنم نمیدونم چرا کرش میکنه برنامه و میگه برنامه متوقف شده است. بعد که پوشه های تلفن رو چک میکنم میبینم پوشه ای که تو کدنویسی تعریف کردم رو ساخته حتی عکس رو هم ذخیره کرد ولی حجم عکس صفر بایته و عکسی نشون نمیده. در واقع یه عکس خالیه که بازشم نمیکنه. مشکل کجاست دوستان؟ خواهش میکنم کمکم کنید.

کد:
public void saveimg()

    {

        ImageView img = (ImageView) findViewById(R.id.full_image_view);
        
        BitmapDrawable btmpDr = (BitmapDrawable) img.getDrawable();
        Bitmap bmp = btmpDr.getBitmap();
        
        
        //Bitmap bm1 = BitmapFactory.decodeResource(getResources(),R.drawable.image5);
        String extStorageDirectory = Environment.getExternalStorageDirectory().toString ();
        File folder = new File(Environment.getExternalStorageDirectory() + "/AtlasLovePic");
        boolean success = true;
        if (!folder.exists()) {
        success = folder.mkdir();
        }
        if (success) {
        FileOutputStream outStream = null;
        Random r=new Random();
        
        File file = new File(folder,"FolderPic("+r.nextInt(1000)+")"+".JPG");
        
        try {
        outStream = new FileOutputStream(file);
    //------------------ code namayesh ax dar gallery be soorate mostaghim
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                  Uri.parse("file://"+ folder)));
    //------------------    
        } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
        try {
        outStream.flush();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        try {
        outStream.close();
        Toast.makeText(FullImageActivity.this, "عکس مورد نظر با موفقیت در گالری گوشی ذخیره شد", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }}

    }
پیغام های مربوط به Logcat رو بزارید تا بررسی بشه
کد:
int randomtedad = 6;
String[] all_characters = {"a","b","c","d","e","f","g","h","i","j","k","l","m",
                          "n","o","p","q","r","s","t","u","v","w","x","y","z",
                          "0","1","2","3","4","5","6","7","8","9"};
int all_characters_length = all_characters.length;

int min = 0;
int max = all_characters_length-1;

randommsg = "";
for(int x = 1; x < randomtedad+1; x = x+1) {
   Random r = new Random();
   int random_number = r.nextInt(max - min + 1) + min;
   String random_character = all_characters[random_number];
   randommsg = randommsg + random_character;
}

        
        
        
        
        
        
         FileOutputStream out = null;
            Bitmap bitmap = ((BitmapDrawable) imageResult.getDrawable()).getBitmap();
            try {
                out = new FileOutputStream(getFilename());
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
Toast.makeText(AxSaz.this, "تصویر در پوشه saveimageapp ذخیره شد", 2000).show();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                Toast.makeText(AxSaz.this, "خطا در ذخیره سازی", 2000).show();
            }
        }

        private String getFilename() {
            File file = new File(Environment.getExternalStorageDirectory()
                    .getPath(), "saveimageapp");
            if (!file.exists()) {
                file.mkdirs();
            }
            String uriSting = (file.getAbsolutePath() + "/"
                    + randommsg + ".jpg");
            return uriSting;
    
    
    
    }

سلام
از این کد ها استفاده کن
اون کد های راندوم مربوط به ساخت نام عکس هستش ک ب صورت راندوم یک اسم 4 حرف میسازه تا عکس جدید جای عکس قبلی نشینه
(۱۳۹۵/۰۳/۱۴, ۰۶:۳۴ ب.ظ)dost-67 نوشته: [ -> ]
کد:
int randomtedad = 6;
String[] all_characters = {"a","b","c","d","e","f","g","h","i","j","k","l","m",
                          "n","o","p","q","r","s","t","u","v","w","x","y","z",
                          "0","1","2","3","4","5","6","7","8","9"};
int all_characters_length = all_characters.length;

int min = 0;
int max = all_characters_length-1;

randommsg = "";
for(int x = 1; x < randomtedad+1; x = x+1) {
   Random r = new Random();
   int random_number = r.nextInt(max - min + 1) + min;
   String random_character = all_characters[random_number];
   randommsg = randommsg + random_character;
}

        
        
        
        
        
        
         FileOutputStream out = null;
            Bitmap bitmap = ((BitmapDrawable) imageResult.getDrawable()).getBitmap();
            try {
                out = new FileOutputStream(getFilename());
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
Toast.makeText(AxSaz.this, "تصویر در پوشه saveimageapp ذخیره شد", 2000).show();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                Toast.makeText(AxSaz.this, "خطا در ذخیره سازی", 2000).show();
            }
        }

        private String getFilename() {
            File file = new File(Environment.getExternalStorageDirectory()
                    .getPath(), "saveimageapp");
            if (!file.exists()) {
                file.mkdirs();
            }
            String uriSting = (file.getAbsolutePath() + "/"
                    + randommsg + ".jpg");
            return uriSting;
    
    
    
داداش یکم در مورد این کدها راهنما    }

سلام
از این کد ها استفاده کن
اون کد های راندوم مربوط به ساخت نام عکس هستش ک ب صورت راندوم یک اسم 4 حرف میسازه تا عکس جدید جای عکس قبلی نشینه

داداش یکم در مورد این کدها راهنمایی کن. ممنون
این کدها رو همه بنویسم داخل تابع بعد تابع رو تو رویداد کلیک فراخونی کنم؟ اگه میشه بگو هر بخش کد رو کجا بنویسم
همش مربوط به رویداد کلیک هستش شما کد ها رو در یک متد قرار بدید وبرنامه رو ران کنید متوجه میشید
بجای استفاده از کد
کد پی‌اچ‌پی:
BitmapDrawable btmpDr = (BitmapDrawableimg.getDrawable();
 
       Bitmap bmp btmpDr.getBitmap(); 

میتونید از همون کد زیرین خودتون 
کد پی‌اچ‌پی:
Bitmap bm1 BitmapFactory.decodeResource(getResources(),R.drawable.image5); 

استفاده کنید



اگر مشکلتون برطرف نشده. احتمالا مربوط پیغام خطای out of memory باشه.
پیغم های توی Logcat رو نشون بدید مشخص میشه مشکل از کجاست.