Salut à tous,
J'ai fait le code suivant pour récuperer un XML depuis un serveur:
Et alors tout marche bien, sauf quand je catch UnknownHostException, a ce moment mon app plante avec le stack suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 public void getXMLData() { if (skipUpdate) { skipUpdate=false; return; } skipUpdate=true; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); int SERVERPORT=0; try { SERVERPORT = Integer.parseInt(prefs.getString("pref_key_port_1","Port")); } catch (NumberFormatException e) { txtStatus.setText("Invalid Port Number"); return; } String SERVERHOST = prefs.getString("pref_key_host_1","127.0.0.1"); String PASSWORD = prefs.getString("pref_key_pass_1", "password"); try { XMLFetcherTask myXMLFetcherTask = new XMLFetcherTask(SERVERHOST,SERVERPORT,PASSWORD); myXMLFetcherTask.execute(); } catch (Exception e) { txtStatus.setText("Error "+e.getMessage()); return; } skipUpdate=false; } public class XMLFetcherTask extends AsyncTask<Void, Void, Void> { String dstAddress; int dstPort; String response = ""; String password=""; XMLFetcherTask(String addr, int port, String pass){ dstAddress = addr; dstPort = port; password=pass; } @Override protected Void doInBackground(Void... arg0) { Socket socket = null; try { socket = new Socket(dstAddress, dstPort); PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); out.println(password); response=""; BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); while (response.toLowerCase().indexOf("</response>")<0) { response+=input.readLine(); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); txtStatus.setText("UnknownHostException: " + e.getMessage()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); txtStatus.setText("IOException: " + e.getMessage()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); txtStatus.setText("Exception: " + e.getMessage()); } finally{ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block //txtStatus.setText("Exception Finally: " + e.getMessage()); } } return null; } @Override protected void onPostExecute(Void result) { if( !(response.substring(0,5).equalsIgnoreCase("<resp") || response.substring(0,5).equalsIgnoreCase("<?xml")) ) //!response.substring(0,5).equalsIgnoreCase("<?xml") || { txtStatus.setText("Server response doesn't look XML, please check password: '"+response.substring(0,5)+"'"); } else { lastXMLData=response; txtStatus.setText("Resp Len: " + response.length()); skipUpdate=false; updateFragmentListeners(); } super.onPostExecute(result); } }
Je vois vraiment pas d'ou ça peut venir...07-29 15:52:08.754 1525-1538/android.process.acore V/BackupServiceBinder? doBackup() invoked
07-29 15:52:08.766 1525-1538/android.process.acore E/DictionaryBackupAgent? Couldn't read from the cursor
07-29 16:29:55.178 1525-1534/android.process.acore E/StrictMode? A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:71)
at android.os.Binder.execTransact(Binder.java:446)
07-29 16:29:55.178 1525-1534/android.process.acore E/StrictMode? A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:64)
at android.os.Binder.execTransact(Binder.java:446)
07-29 16:29:55.178 1525-1534/android.process.acore E/StrictMode? A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:57)
at android.os.Binder.execTransact(Binder.java:446)
J'ai commenté les txtStatus.setText mais ça ne change rien...
Partager