2013-03-20 2 views
0

Я разработал приложение для Android, которое загружает изображение с устройства Gallery на сервер. Он отлично работает, другие устройства ожидают Galaxy S3. Моя Galaxy S2 отлично работает, хотя S2 и S3 имеют одинаковые Jelly Bean.Загрузить изображение на серверные сбои в Galaxy S3, но отлично работает для других устройств

В S3 при загрузке приложения для приложения с изображениями. Не знаете, что случилось? Вот код, чтобы загрузить изображение:

if (selectedImagePath.length() != 0) { 

      // get data from page 

      try 
      { 

       BitmapFactory.Options opts=new BitmapFactory.Options(); 
       opts.inSampleSize = 4; 

       Bitmap bitmapOrg = BitmapFactory.decodeFile(selectedImagePath,opts); 

       System.gc(); 

       ByteArrayOutputStream bao = new ByteArrayOutputStream(); 


       // Resize the image 
       double width = bitmapOrg.getWidth(); 
       double height = bitmapOrg.getHeight(); 
       double ratio = 300/width; 
       int newheight = (int) (ratio * height); 

       // System.out.println("———-width" + width); 
       // System.out.println("———-height" + height); 

       bitmapOrg = Bitmap.createScaledBitmap(bitmapOrg,400, 
         newheight, true); // 400 chilo age 

       // Here you can define .PNG as well 
       bitmapOrg.compress(Bitmap.CompressFormat.JPEG,75, bao); 

       byte[] ba = bao.toByteArray(); 
       String ba1 = ImageConverter.encodeBytes(ba); 

       // System.out.println("uploading image now ——–” + ba1); 

       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("image", ba1)); 

       nameValuePairs.add(new BasicNameValuePair("event_id", 
         Integer.toString(taskEntity.getEventId()))); 
       nameValuePairs.add(new BasicNameValuePair("title", title)); 
       nameValuePairs.add(new BasicNameValuePair("description", 
         description)); 
       nameValuePairs.add(new BasicNameValuePair("urgent", Integer 
         .toString(urgentAttention))); 
       nameValuePairs.add(new BasicNameValuePair("sendtime", 
         convertedtime)); 

       try { 

        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost(
          AppSettings.SERVER_ADDRESS+"upload_image.php"); 
        httppost.setEntity(new UrlEncodedFormEntity(
          nameValuePairs)); 

        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity(); 

        // print responce 
        outPut = EntityUtils.toString(entity); 
        Log.i("GET RESPONSE—-", outPut); 

        // is = entity.getContent(); 
        Log.e("log_tag ******", "good connection"); 

        bitmapOrg.recycle(); 


       } catch (Exception e) { 
        Log.e("log_tag ******", 
          "Error in http connection " + e.toString()); 
       } 

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

     } 

ответ

1

Вы не указали, что ошибка вы получаете, но так как ваша проблема специфична для Galaxy S3 я предполагаю, что это OutOfMemoryError. S3 имеет тенденцию иметь небольшие кучи приложений относительно размера экрана, поэтому битмап-хранилище немного туго.

Попробуйте использовать:

opts.inPurgeable = true; 
opts.inInputShareable = true; 

inPurgeable выделит растровое изображение на другой куче и позволяют его данные должны быть отброшены под давлением памяти, не дожидаясь сборки мусора. inInputShareable позволит растровому изображению быть повторно декодированным с указанного входа, если он очищен до того, как вы закончите с ним. Рекомендуется использовать эти два варианта как можно чаще. Просто помните, что с inInputShareable декодируемые данные не могут быть изменены или отброшены, потому что битмап может понадобиться снова.

+0

спасибо, решен. – arefin

 Смежные вопросы

  • Нет связанных вопросов^_^