Java 已成功将base 64字符串放入数据库,但获得“0”;“内存不足”;在android中获取与二进制相同并设置为图像视图时出错
日志:Java 已成功将base 64字符串放入数据库,但获得“0”;“内存不足”;在android中获取与二进制相同并设置为图像视图时出错,java,android,database,out-of-memory,Java,Android,Database,Out Of Memory,日志: 03-29 06:14:23.526: I/Choreographer(8792): Skipped 140 frames! The application may be doing too much work on its main thread. 03-29 06:14:24.826: D/Response:(8792): > [{"MyImage":[47,57,106,47,52,65,65,81,83,107,90,74,82,103,65,66,65,81,65,65
03-29 06:14:23.526: I/Choreographer(8792): Skipped 140 frames! The application may be doing too much work on its main thread.
03-29 06:14:24.826: D/Response:(8792): > [{"MyImage":[47,57,106,47,52,65,65,81,83,107,90,74,82,103,65,66,65,81,65,65,65,81,65,66,65,65,68,47,50,119],"RegID":15,"TotFriends":4,"TotLosses":3,"TotWins":0}]
03-29 06:14:24.826: D/Hi(8792): or bandar
03-29 06:14:24.846: D/len(8792): 1
03-29 06:14:24.877: D/>>>(8792): [47,57,106,47,52,65,65,81,83,107,90,74,82,103,65,66,65,81,65,65,65,81,65,66,65,65,68,47,50,119]
03-29 06:14:25.117: D/dalvikvm(8792): GC_FOR_ALLOC freed 1031K, 29% free 4040K/5616K, paused 179ms, total 203ms
03-29 06:14:25.117: I/dalvikvm-heap(8792): Forcing collection of SoftReferences for 185326656-byte allocation
03-29 06:14:25.396: D/dalvikvm(8792): GC_BEFORE_OOM freed 13K, 29% free 4027K/5616K, paused 243ms, total 279ms
03-29 06:14:25.396: E/dalvikvm-heap(8792): Out of memory on a 185326656-byte allocation.
03-29 06:14:25.406: I/dalvikvm(8792): "main" prio=5 tid=1 RUNNABLE
03-29 06:14:25.406: I/dalvikvm(8792): | group="main" sCount=0 dsCount=0 obj=0x414c5578 self=0x2a00d090
03-29 06:14:25.406: I/dalvikvm(8792): | sysTid=8792 nice=0 sched=0/0 cgrp=apps handle=1073811452
03-29 06:14:25.416: I/dalvikvm(8792): | state=R schedstat=( 11010907622 17481370015 17046 ) utm=929 stm=172 core=0
03-29 06:14:25.416: I/dalvikvm(8792): at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
03-29 06:14:25.436: I/dalvikvm(8792): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:429)
03-29 06:14:25.436: I/dalvikvm(8792): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:447)
03-29 06:14:25.436: I/dalvikvm(8792): at com.example.buddybets.MyProfile.onCreate(MyProfile.java:142)
03-29 06:14:25.436: I/dalvikvm(8792): at android.app.Activity.performCreate(Activity.java:5133)
03-29 06:14:25.436: I/dalvikvm(8792): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-29 06:14:25.436: I/dalvikvm(8792): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
03-29 06:14:25.447: I/dalvikvm(8792): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
03-29 06:14:25.447: I/dalvikvm(8792): at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-29 06:14:25.457: I/dalvikvm(8792): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
03-29 06:14:25.457: I/dalvikvm(8792): at android.os.Handler.dispatchMessage(Handler.java:99)
03-29 06:14:25.466: I/dalvikvm(8792): at android.os.Looper.loop(Looper.java:137)
03-29 06:14:25.466: I/dalvikvm(8792): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-29 06:14:25.466: I/dalvikvm(8792): at java.lang.reflect.Method.invokeNative(Native Method)
03-29 06:14:25.476: I/dalvikvm(8792): at java.lang.reflect.Method.invoke(Method.java:525)
03-29 06:14:25.476: I/dalvikvm(8792): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-29 06:14:25.476: I/dalvikvm(8792): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-29 06:14:25.486: I/dalvikvm(8792): at dalvik.system.NativeStart.main(Native Method)
03-29 06:14:25.497: D/skia(8792): --- decoder->decode returned false
03-29 06:14:25.497: D/AndroidRuntime(8792): Shutting down VM
03-29 06:14:25.506: W/dalvikvm(8792): threadid=1: thread exiting with uncaught exception (group=0x414c4700)
03-29 06:14:25.647: E/AndroidRuntime(8792): FATAL EXCEPTION: main
03-29 06:14:25.647: E/AndroidRuntime(8792): java.lang.OutOfMemoryError
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:429)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:447)
03-29 06:14:25.647: E/AndroidRuntime(8792): at com.example.buddybets.MyProfile.onCreate(MyProfile.java:142)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.Activity.performCreate(Activity.java:5133)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.os.Handler.dispatchMessage(Handler.java:99)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.os.Looper.loop(Looper.java:137)
03-29 06:14:25.647: E/AndroidRuntime(8792): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-29 06:14:25.647: E/AndroidRuntime(8792): at java.lang.reflect.Method.invokeNative(Native Method)
03-29 06:14:25.647: E/AndroidRuntime(8792): at java.lang.reflect.Method.invoke(Method.java:525)
03-29 06:14:25.647: E/AndroidRuntime(8792): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-29 06:14:25.647: E/AndroidRuntime(8792): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-29 06:14:25.647: E/AndroidRuntime(8792): at dalvik.system.NativeStart.main(Native Method)
03-29 06:17:06.707: I/Process(8792): Sending signal. PID: 8792 SIG: 9
03-29 06:17:08.657: I/Choreographer(9176): Skipped 179 frames! The application may be doing too much work on its main thread.
阅读以下教程: 您可以尝试以下代码 将宽度设置为版面宽度或屏幕宽度 查找屏幕宽度:
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
Drawable drawable = new BitmapDrawable(getResources(), decodeFile(chkFile, width , height ));
imageView.setBackground(drawable);
public Bitmap decodeFile(File f,int WIDTH,int HIGHT){
try {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
//The new size we want to scale to
final int REQUIRED_WIDTH=WIDTH;
final int REQUIRED_HIGHT=HIGHT;
//Find the correct scale value. It should be the power of 2.
int scale=1;
while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
scale*=2;
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
System.out.println("bitmap decodeFile:"+e);
}
return null;
}
只需将largeHeap=“true”
放入应用程序标记(AndroidManifest.xml)
希望它能帮助你。
谢谢。服务器正在向您发送一个base 64字符串,您正在尝试直接读取它的字节。首先需要对其进行解码,然后将其转换为字节数组 试试这个:
byte[] decodedBytes = Base64.decode(pic, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes ,0,decodedBytes.length)
如果有人知道。。。我在服务器上成功地将图像设置为base 64字符串,但在另一个类中检索该图像以设置图像视图“内存不足”OCCRUS:-(可能重复,在转换Base64I已调整大小的位图之前,您必须调整位图的大小..作为位图bm=BitmapFactory.decodeStream(fis);ByteArrayOutputStream=new ByteArrayOutputStream();bm.compress(CompressFormat.JPEG,40,stream);字符串imgString=Base64.encodeToString(stream.toByteArray(),Base64.NO_WRAP);bm.recycle();[47,57,106,47,52,65,65,81,83,107,90,74,82,103,65,66,65,81,65,65,65,81,65,66,65,65,68,47,50,119]这是我检索的字节数组,我把它作为base64字符串放在远程数据库中..为什么我检索的数组太小..我认为在重新调整大小后,以及在从数据库检索相同图像后,存在一些问题,然后在图像视图上设置时显示错误
byte[] decodedBytes = Base64.decode(pic, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes ,0,decodedBytes.length)