Problem:
Beim Schreiben einer Datei mit weniger als 2 KB wird direkt das Problem gemeldet, dass die von retrofit2 angeforderte Datei verwendet wird. Kann ein Experte Zeit haben, den Grund herauszufinden?
D/OkHttp: --> GET http://musicdata.baidu.com/da... http/1.1
D/OkHttp: <-- 200 OK http://musicdata. baidu .com/da... (98 ms, 1877-Byte-Körper)
D/ContentValues: onResponse: Textdateianforderung erfolgreich
I/art: Thread[2,tid=3036,WaitingInMainSignalCatcherLoop,Thread*=0xae402000,peer=0x12c930a0 , „Signal Catcher“]: Reagiert auf Signal 3 verbleibt auf dem Gerät)
W/System.err: bei libcore.io.IoBridge.write(IoBridge.java:498)
W/System.err: bei java.io.FileOutputStream.write(FileOutputStream.java:186)
W / System.err: bei com.wang.mymusic.data.MusicData.lrcFile(MusicData.java:163)
W/System.err: bei com.wang.mymusic.data.MusicData.access$200(MusicData.java:40 )
W/System.err: bei com.wang.mymusic.data.MusicData$3.onResponse(MusicData.java:123)
W/System.err: bei retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java: 68 )
W/System.err: bei android.os.Handler.handleCallback(Handler.java:739)
W/System.err: bei android.os.Handler.dispatchMessage(Handler.java:95)
W/System . err: bei android.os.Looper.loop(Looper.java:148)
W/System.err: bei android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: bei java. lang .reflect.Method.invoke(Native Method)
W/System.err: bei com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: bei com.android . internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err: Verursacht durch: android.system.ErrnoException: Schreiben fehlgeschlagen: ENOSPC (Kein Platz mehr auf dem Gerät)
W/System.err: at libcore .io.Posix.writeBytes(Native Method)
W/System.err: bei libcore.io.Posix.write(Posix.java:271)
W/System.err: bei libcore.io.BlockGuardOs.write(BlockGuardOs . java:313)
W/System.err: bei libcore.io.IoBridge.write(IoBridge.java:493)
W/System.err: ... 12 weitere
I/art: Hintergrund teilweise gleichzeitiger Mark Sweep GC 83995(3MB) AllocSpace-Objekte freigegeben, 0(0B) LOS-Objekte, 12 % frei, 27MB/31MB, angehalten 3,141ms insgesamt 131,690ms
I/art: Sticky Concurrent Mark Sweep im Hintergrund GC freigegeben 104777(4MB) AllocSpace-Objekte, 0( 0B) ) LOS-Objekte, 0 % frei, 34 MB/34 MB, angehalten 5,311 ms, insgesamt 163,136 ms
Code:
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){
这个使用循环是不对的,这块应该将循环改成if