0

こんにちは、アンドロイドで画像を転送したいときにこのエラーが発生しました。理由がわかりません。

EDIT:私は理由を見つけました。理由は、彼らが許可されたメモリが不十分であることです。許可されたメモリを変更するには?

   EDIT:FATAL EXCEPTION: main
   java.lang.OutOfMemoryError

07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:389)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at P12.transferImage(P12.java:503)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at P12.access$4(P12.java:487)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at P12$6.onClick(P12.java:313)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.view.View.performClick(View.java:3644)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.view.View$PerformClick.run(View.java:14313)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.os.Handler.handleCallback(Handler.java:605)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.os.Looper.loop(Looper.java:137)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at android.app.ActivityThread.main(ActivityThread.java:4514)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at java.lang.reflect.Method.invokeNative(Native Method)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at java.lang.reflect.Method.invoke(Method.java:511)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
07-18 08:50:35.169: E/AndroidRuntime(16772):    at dalvik.system.NativeStart.main(Native Method)
07-18 08:55:44.474: I/Process(16772): Sending signal. PID: 16772 SIG: 9
07-18 08:55:44.764: D/dalvikvm(17129): GC_FOR_ALLOC freed 65K, 4% free 12756K/13187K, paused 16ms

問題は並んでいる

Bitmap imgTaken = BitmapFactory.decodeFile(from, options);

URL ファイルが正しいことを確認しました

これが私の転送機能の始まりです。

private void transferImage(String from,String imageName) throws IOException {
    Log.i("debug","from:"+from.toString());
    // we want remote host, user name and password
    if (from == null || from.length() == 0) {
        Toast.makeText(getBaseContext(), getString(R.string.errorFTPparameters), Toast.LENGTH_LONG).show();
        setResult(11);
        finish();
    }

    try {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inTempStorage = new byte[16*1024];

        // byte array transfers
        Bitmap imgTaken = BitmapFactory.decodeFile(from, options);

        if (imgTaken == null) {
            Toast.makeText(getBaseContext(), getString(R.string.errorcreatingstream), Toast.LENGTH_LONG).show();

            setResult(11);
            finish();
        }

        // transforming image into byte array
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        imgTaken.compress(CompressFormat.JPEG, 60, bos);
        byte[] bitmapdata = bos.toByteArray();

        // base64 encoding of the bytes in a string
        String bos1 = Base64.encodeBytes(bitmapdata);
        //...
4

1 に答える 1

0

さて、あなたの画像は、Androidがあなたに割り当てたメモリに収まるほど大きくなっています。フル解像度の画像が必要ない場合は、次のコマンドを使用して、事前に画像サイズを小さいサイズに設定してみてinSampleSizeください。

options.inSampleSize = 2 //gives you an image with half the height/width

フル解像度の画像が必要な場合は、機能で何を達成したいのかを明確にしてください。そうtransferImageすれば、別の方法を提供できるかもしれません。

于 2012-07-18T08:09:27.860 に答える