[android]将图像上传到服务器崩溃在 Galaxy S3 但工作正常,为其他设备

标签: Android Galaxy
发布时间: 2017/3/15 1:21:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我开发了 Android 上传图像从设备的应用程序 Gallery 到服务器。它的优良工程其他设备期待银河 S3。我 Galaxy S2 工作正常,但 S2 和 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 我猜它发生内存不足错误。 S3 倾向所以有堆相对于屏幕大小的小应用程序 bitmap 存储是有点紧。

尝试使用︰

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

inPurgeable 将分配 bitmap 不同堆上,并允许其数据,而无需等待垃圾回收器丢弃在内存压力下。 inInputShareable 将允许 bitmap ,它清除在您完成与它之前的情况下重新解码从指定的输入。 它是很好的做法尽可能经常使用这两个选项。 只记得与 inInputShareable 不能更改一些被解码的数据,或可以被丢弃,因为 Bitmap 可能再需要它。

官方微信
官方QQ群
31647020