Problème :
Lors de l'écriture d'un fichier de moins de 2 Ko, il signale directement le problème d'espace insuffisant. Le fichier demandé par retrofit2 est-il utilisé. Un expert peut-il avoir le temps d'en découvrir la raison ?
Détails du rapport d'erreur :
D/OkHttp : --> GET http://musicdata.baidu.com/da... http/1.1
D/OkHttp : <-- 200 OK http://musicdata. baidu .com/da... (98 ms, corps de 1 877 octets)
D/ContentValues : onResponse : demande de fichier de paroles réussie
I/art : Thread[2,tid=3036,WaitingInMainSignalCatcherLoop,Thread*=0xae402000,peer=0x12c930a0 , "Signal Catcher"] : réaction au signal 3
I/art : écriture des traces de pile dans '/data/anr/traces.txt'
W/System.err : java.io.IOException : échec d'écriture : ENOSPC (pas d'espace laissé sur l'appareil)
W/System.err : sur libcore.io.IoBridge.write(IoBridge.java:498)
W/System.err : sur java.io.FileOutputStream.write(FileOutputStream.java:186)
W / System.err : sur com.wang.mymusic.data.MusicData.lrcFile(MusicData.java:163)
W/System.err : sur com.wang.mymusic.data.MusicData.access$200(MusicData.java:40 )
W/System.err : sur com.wang.mymusic.data.MusicData$3.onResponse(MusicData.java:123)
W/System.err : sur retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java : 68 )
W/System.err : sur android.os.Handler.handleCallback(Handler.java:739)
W/System.err : sur android.os.Handler.dispatchMessage(Handler.java:95)
W/System . erreur : sur android.os.Looper.loop(Looper.java:148)
W/System.err : sur android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err : sur java. lang .reflect.Method.invoke(Native Method)
W/System.err : sur com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err : sur com.android . internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err : causé par : android.system.ErrnoException : échec d'écriture : ENOSPC (aucun espace restant sur l'appareil)
W/System.err : à. libcore .io.Posix.writeBytes (méthode native)
W/System.err : sur libcore.io.Posix.write(Posix.java:271)
W/System.err : sur libcore.io.BlockGuardOs.write(BlockGuardOs . java:313)
W/System.err: at libcore.io.IoBridge.write(IoBridge.java:493)
W/System.err: ... 12 de plus
I/art: GC de balayage de marques simultanées partielles en arrière-plan libéré 83995 (3 Mo) objets AllocSpace, 0 (0B) objets LOS, 12 % gratuits, 27 Mo/31 Mo, pause 3,141 ms au total 131,690 ms
I/art : balayage de marque concurrent collant en arrière-plan GC libéré 104777 (4 Mo) objets AllocSpace, 0 ( 0B) ) Objets LOS, 0 % gratuits, 34 Mo/34 Mo, pause 5,311 ms total 163,136 ms
Code :
//Enregistrer le fichier de paroles sur le disque
private File lrcFile(Context context,ResponseBody respon,String title,String author) throws IOException { //create a file File filedirectory; File file; String name=title+"_"+author+".lrc"; if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()){ filedirectory=new File(context.getExternalCacheDir()+File.separator+"lrc"); file=new File(filedirectory+File.separator+name); }else { filedirectory=new File(context.getCacheDir()+File.separator+"lrc"); file=new File(filedirectory+File.separator+name); } if (!filedirectory.exists()){ filedirectory.mkdir(); } if(!file.exists()){ file.createNewFile(); } InputStream in=respon.byteStream(); try { OutputStream out=new FileOutputStream(file); byte[] b=new byte[2048]; int fileread=in.read(b); while (fileread!= -1){ out.write(b,0,fileread); } out.flush(); out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } return file; }
while (fileread!= -1){
Il est faux d'utiliser une boucle. Cette boucle doit être remplacée par if
.