Envoi de données d'une application vers un serveur
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:
Code:
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);
}
?> |
et le code Java:
Code:
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;
}
}
} |
Bien sûr je n'ai pas oublié la permission dans le manifest.
Et dans le logcat j'ai ça:
Code:
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 |
Les erreurs sont-elles liées à une différence de version d'API (10 pour le tuto, 19 pour la mienne) ?
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 :D