Bonjour, je développe une application Android et après un bon bout de temps passé sur la partie interface graphique je m'attaque à la partie communication avec le serveur. Pour cela je m’entraîne actuellement sur un tutoriel que j'avais un peu modifié mais j'avais eu des erreurs du coup j'ai réessayé et je pense que j'ai la même chose que dans le tuto au mot près. Problème les mêmes erreurs apparaissent dans le logcat!
Voilà le code PHP:et le code Java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php if (isset($_POST) && !empty($_POST)) { extract($_POST); $db = mysql_connect('localhost', 'root', 'root'); //chemin pour se co a la bdd mysql_select_db('gsctuto', $db); $sql = "insert INTO information (message) VALUES ('$message')"; mysql_query($sql); } ?>Bien sûr je n'ai pas oublié la permission dans le manifest.
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 package com.lagwil.testandroidrestclient; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends ActionBarActivity { EditText edtMsg; Button btnEnvoyer; String resultat = null; InputStream is = null; StringBuilder sb = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edtMsg = (EditText)findViewById(R.id.edtMsg); btnEnvoyer = (Button)findViewById(R.id.btnEnvoyer); } public void envoyerMessage(View v){ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://adresse_ip/eclipse/PremierProjet/newfile.php"); //adresse IP du pc/fichier de sauvegarde/nom du projet php/nom du fichier String msg = edtMsg.getText().toString(); if (msg.length() >0){ try{ List<NameValuePair> donnees = new ArrayList<NameValuePair>(1); donnees.add(new BasicNameValuePair("message", msg)); post.setEntity(new UrlEncodedFormEntity(donnees)); client.execute(post); edtMsg.setText(""); Toast.makeText(this, "Message envoyé", Toast.LENGTH_SHORT).show(); } catch(ClientProtocolException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } else Toast.makeText(this, "Ce champs ne peut etre vide!", Toast.LENGTH_SHORT).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } }
Et dans le logcat j'ai ça:
Les erreurs sont-elles liées à une différence de version d'API (10 pour le tuto, 19 pour la mienne) ?
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 07-02 15:26:34.273: E/AndroidRuntime(11154): FATAL EXCEPTION: main 07-02 15:26:34.273: E/AndroidRuntime(11154): java.lang.IllegalStateException: Could not execute method of the activity 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.view.View$1.onClick(View.java:3758) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.view.View.performClick(View.java:4377) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.view.View$PerformClick.run(View.java:18044) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.os.Handler.handleCallback(Handler.java:725) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.os.Handler.dispatchMessage(Handler.java:92) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.os.Looper.loop(Looper.java:137) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.app.ActivityThread.main(ActivityThread.java:5306) 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.lang.reflect.Method.invokeNative(Native Method) 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.lang.reflect.Method.invoke(Method.java:511) 07-02 15:26:34.273: E/AndroidRuntime(11154): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 07-02 15:26:34.273: E/AndroidRuntime(11154): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 07-02 15:26:34.273: E/AndroidRuntime(11154): at dalvik.system.NativeStart.main(Native Method) 07-02 15:26:34.273: E/AndroidRuntime(11154): Caused by: java.lang.reflect.InvocationTargetException 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.lang.reflect.Method.invokeNative(Native Method) 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.lang.reflect.Method.invoke(Method.java:511) 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.view.View$1.onClick(View.java:3753) 07-02 15:26:34.273: E/AndroidRuntime(11154): ... 11 more 07-02 15:26:34.273: E/AndroidRuntime(11154): Caused by: android.os.NetworkOnMainThreadException 07-02 15:26:34.273: E/AndroidRuntime(11154): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128) 07-02 15:26:34.273: E/AndroidRuntime(11154): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 07-02 15:26:34.273: E/AndroidRuntime(11154): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 07-02 15:26:34.273: E/AndroidRuntime(11154): at libcore.io.IoBridge.connect(IoBridge.java:112) 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 07-02 15:26:34.273: E/AndroidRuntime(11154): at java.net.Socket.connect(Socket.java:842) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 07-02 15:26:34.273: E/AndroidRuntime(11154): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 07-02 15:26:34.273: E/AndroidRuntime(11154): at com.lagwil.testandroidrestclient.MainActivity.envoyerMessage(MainActivity.java:54) 07-02 15:26:34.273: E/AndroidRuntime(11154): ... 14 more
Je ne suis pas certain non plus de la façon dont j'envoi des données dans le POST, dois-je mettre l'adresse IP de mon pc? et eclipse est-il bien le fichier par défaut où s'enregistre les projets?
Enfin que sont les erreurs:
java.lang.reflect.InvocationTargetException
android.os.NetworkOnMainThreadException ??
Après une petite recherche j'ai appris que la première apparaissait lorque une ressource particulière était nulle et pour la seconde j'ai vu que je devais peut être utiliser AsyncTask...
Voilà j'espère que c'est compréhensible et que quelqu'un pourra m'aider! Merci d'avance
Partager