Je suis en train de télécharger un gros fichier .zip à partir d'un serveur Web, mais j'ai un comportement bizarre, la description est:télécharger des fichiers Android grand
- J'exécution du code dans l'émulateur de périphérique, API niveau 3 (version 1.5) avec une carte SD de 512 Mo. Je commence l'appareil avec « Wipe utilisateur de données »
- La longueur de la taille de conexion.getContentLength() est 7012725
- L'adresse serveur est localhost (10.0.2.2), mais je l'ai essayé avec un serveur externe et le comportement est le même. J'ai vérifié que je peux télécharger le fichier via un navigateur Web.
- Je ces permisions dans le fichier manifeste:
-
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
L'erreur:
- Il commence à télécharger le fichier, je peux voir le texte 10, 20, 30, 40, 50, puis s'arrête à 60.
- Après un certain temps, l'émulateur redémarre automatiquement.
Solutions:
- This question dans stackoverflow travaille dans l'appareil, pas dans mon cas.
A propos de ce verrou wifi issue ce que je l'ai fait est d'ajouter cette autorisation « android.permission.WAKE_LOCK » et ce morceau de code, mais avec exactement le même comportement:
WifiManager.WifiLock wifilock; WifiManager manager = (WifiManager) getSystemService (Context.WIFI_SERVICE); wifilock = manager.createWifiLock ("wifilock"); wifilock.acquire(); ... wifilock.release();
Voici le code, qu'il est d'être l'exécution dans un thread séparé:
private void downloadData(){
try{
Log.v(TAG, "downloading data");
URL url = new URL("http://10.0.2.2/1.zip");
URLConnection connection = url.openConnection();
connection.connect();
int lenghtOfFile = connection.getContentLength();
Log.v(TAG, "lenghtOfFile = "+lenghtOfFile);
InputStream is = url.openStream();
File testDirectory = new File(Environment.getExternalStorageDirectory()+"/testDirectory/");
if(!testDirectory.exists()){
testDirectory.mkdir();
}
FileOutputStream fos = new FileOutputStream(testDirectory+"/files.zip");
byte data[] = new byte[1024];
int count = 0;
long total = 0;
int progress = 0;
while ((count=is.read(data)) != -1)
{
total += count;
int progress_temp = (int)total*100/lenghtOfFile;
if(progress_temp%10 == 0 && progress != progress_temp){
progress = progress_temp;
Log.v(TAG, "total = "+progress);
}
fos.write(data, 0, count);
}
is.close();
fos.close();
Log.v(TAG, "downloading finished");
}catch(Exception e){
Log.v(TAG, "exception in downloadData");
e.printStackTrace();
}
}
Un indice? Merci beaucoup.
Mise à jour avec plus Description du journal:
Hi Chris, I've tried to discover what was going on at first with this log in the Eclipse environment. Here are a little bit more detail about what is happening (time - action), note that I've changed the file to download for another one in orther to do more tests, but the results are quite the same:
00:00 It starts downloading:
V/iPhoto ( 853): downloading data
V/iPhoto ( 853): lenghtOfFile = 7732809
V/iPhoto ( 853): total = 10
V/iPhoto ( 853): total = 20
V/iPhoto ( 853): total = 30
V/iPhoto ( 853): total = 40
V/iPhoto ( 853): total = 50 (round 00:05)
-> Here it stops and the DDMS disconnects the device immediately
03:40 It finish the download (not always) and the device reboots on its own:
I/Process ( 595): Sending signal. PID: 595 SIG: 3
I/dalvikvm( 595): threadid=7: reacting to signal 3
D/dalvikvm( 722): GC freed 2193 objects/135808 bytes in 176 sec
V/iPhoto ( 853): total = 60
I/dalvikvm( 595): Wrote stack trace to '/data/anr/traces.txt'
I/ActivityManager( 595): Process com.google.android.apps.maps:FriendService (pid 778) has died.
I/ActivityManager( 595): Process com.android.mms (pid 732) has died.
V/iPhoto ( 853): total = 70
V/iPhoto ( 853): total = 80
V/iPhoto ( 853): total = 90
V/iPhoto ( 853): total = 100
V/iPhoto ( 853): downloading finished
V/iPhoto ( 853): thread finish loading
I/Process ( 595): Sending signal. PID: 595 SIG: 9
I/ActivityThread( 757): Removing dead content provider: settings
I/ActivityThread( 748): Removing dead content provider: settings
I/ActivityThread( 722): Removing dead content provider: settings
I/ActivityThread( 700): Removing dead content provider: settings
I/ServiceManager( 549): service 'package' died
... services dying...
I/ServiceManager( 549): service 'wifi' died
E/installd( 557): eof
E/installd( 557): failed to read size
I/installd( 557): closing connection
D/qemud ( 560): fdhandler_event: disconnect on fd 11
D/qemud ( 560): fdhandler_event: disconnect on fd 12
E/vold ( 550): Framework disconnected
I/Zygote ( 554): Exit zygote because system server (595) has terminated
I/ServiceManager( 549): service 'simphonebook' died
I/ServiceManager( 549): service 'isms' died
I/ServiceManager( 549): service 'iphonesubinfo' died
I/ServiceManager( 549): service 'phone' died
D/AndroidRuntime( 949):
D/AndroidRuntime( 949): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
... and starting ...
Quelqu'un pourrait-il essayer mon code et pour télécharger un fichier zip avec la taille ronde 8MB? Est-ce que cela fonctionne pour vous?
Merci pour ce code, a parfaitement fonctionné la première fois, sur mon Samsung S3. – zeeshan