2013-05-01 7 views
5

Ich versuche, einige Daten an meine Website zu senden. Wenn die Schaltfläche geklickt wird, müssen Daten an die Website gesendet werdenWie senden Daten an die Website mit Android App

aber ich habe einige Fehler, wenn ich das Programm leite

, wenn ich auf die Schaltfläche erscheint diese Meldung geklickt „hat leider App gestoppt“ dann Beende meine Bewerbung.

public class testInput extends Activity { 

Button Setbutton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.test_input_page); 

    Setbutton=(Button)findViewById(R.id.setbtn); 

Setbutton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
     testInput ti=new testInput(); 
      //Create the intent 



      ti.postData("Sent Data"); 


    }); 

} 

public void postData(String toPost) { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://mysite.com/index.php"); 

    //This is the data to send 
    String MyName = toPost; //any data to send 

    try { 
    // Add your data 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("action", MyName)); 

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    // Execute HTTP Post Request 

    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    String response = httpclient.execute(httppost, responseHandler); 

    //This is the response from a php application 
    String reverseString = response; 
    Toast.makeText(this, "response" + reverseString, Toast.LENGTH_LONG).show(); 

    } catch (ClientProtocolException e) { 
    Toast.makeText(this, "CPE response " + e.toString(), Toast.LENGTH_LONG).show(); 
    // TODO Auto-generated catch block 
    } catch (IOException e) { 
    Toast.makeText(this, "IOE response " + e.toString(), Toast.LENGTH_LONG).show(); 
    // TODO Auto-generated catch block 
    } 

    }//end postData() 

Dies ist mein PHP-Code.

<?php 

//code to reverse the string 

$reversed = strrev($_POST["action"]); 

echo $reversed; 

?> 

Ich habe die Erlaubnis auch für die Verwendung von Internet in meiner App.

+0

Sie haben die Fehler, die Sie bekommen, nicht erwähnt. –

+0

Hast du etwas bekommen, das funktioniert? Wenn ja, bitte posten, um allen zu helfen. Vielen Dank! – jkw4703

Antwort

3

Seit Android 3.x können Sie keine Netzwerkoperationen im Hauptthread ausführen. Sie müssen AsyncTask verwenden oder einen Thread trennen, in dem Sie Ihre postData-Methode aufrufen können. Hier

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

+0

Vielen Dank, können Sie es bitte weiter erklären Weil ich neu in Android-Entwicklung bin – Tikitaka

+0

http://Stackoverflow.com/a/9671602/527759 http://developer.android.com/reference/android/os/AsyncTask .html – httpdispatch

0

ist ein Code-Schnipsel, in der Hoffnung es wird dir helfen.

1) Eine Funktion, die den HTTP-GET-Dienst trägt

private String SendDataFromAndroidDevice() { 
    String result = ""; 

    try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet getMethod = new HttpGet("your url + data appended"); 

     BufferedReader in = null; 
     BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient 
       .execute(getMethod); 
     in = new BufferedReader(new InputStreamReader(httpResponse 
       .getEntity().getContent())); 

     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     while ((line = in.readLine()) != null) { 
      sb.append(line); 
     } 
     in.close(); 
     result = sb.toString(); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

2) Eine Klasse, die AsyncTask

private class HTTPdemo extends 
     AsyncTask<String, Void, String> { 

    @Override 
    protected void onPreExecute() {} 

    @Override 
    protected String doInBackground(String... params) { 
     String result = SendDataFromAndroidDevice(); 
     return result; 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) {} 

    @Override 
    protected void onPostExecute(String result) { 

     if (result != null && !result.equals("")) { 
      try { 
       JSONObject resObject = new JSONObject(result); 

       } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

3) In Ihrem onCreate Methode

 @Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView("your layout"); 



    if ("check here where network/internet is avaliable") { 

     new HTTPdemo().execute(""); 
    } 

    } 

Der Code erweitert Das von mir zur Verfügung gestellte Snippet funktioniert folgendermaßen:

1) Android-Gerät senden und die URL + Daten an den Server

2) Server [sagen PHP verwendet], um die Daten zu empfangen und gibt eine Bestätigung

nun der Code, der geschrieben werden soll auf Client-Seite (Android) zur Verfügung gestellt wird, ist der spätere Teil, dass die Daten auf dem Server empfangen

  • Server die Daten empfangen muss
  • eine Funktionalität auf Server-Seite implementieren
  • Diese Funktionalität [Webservice] wird aufgerufen, wann immer android die URL + Daten
  • Sobald Sie die Daten vorantreiben wird, manipuliert sie, wie Sie
  • wollen
+0

THank you Ist mein PHP-Code nützlich für die Serverseite? – Tikitaka

+0

Ist mein aktueller PHP-Code nützlich, um Daten zu bekommen? – Tikitaka

2

verwenden Sie den folgenden Code

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://yoursite.com/index.php"); 

String MyName = toPost; 

try 
{ 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("action", MyName)); 

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    HttpResponse response = httpclient.execute(httppost); 

    InputStream is = response.getEntity().getContent(); 

    BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

    result = br.readLine(); 
    //This is the response from a php application 
    String reverseString = result; 
    Toast.makeText(this, "result" + reverseString, Toast.LENGTH_LONG).show(); 
} 
catch(Exception e) 
{ 
    Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); 
} 
1
i hope this help u alloott 
package com.example.test; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button but=(Button)findViewById(R.id.button1); 
    but.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      postData(); 

     } 
    }); 


} 

@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; 
} 
public void postData() { 
    // Create a new HttpClient and Post Header 
    class ss extends AsyncTask<Void, Void, String> 
    { 

    @Override 
    protected String doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     HttpClient httpclient = new DefaultHttpClient(); 
     String result = null; 
     HttpPost httppost = new HttpPost("http://www.techdoo.com/test.php"); 

     try 
     { 

     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("action", "fadeel")); 

     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     HttpResponse response = httpclient.execute(httppost); 

     InputStream is = response.getEntity().getContent(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

     result = br.readLine(); 
     //This is the response from a php application 
     String reverseString = result; 
     EditText edit1=(EditText)findViewById(R.id.editText1); 
     edit1.setText(result); 
     // Toast.makeText(this, "result" + reverseString, Toast.LENGTH_LONG).show(); 
     } 
     catch(Exception e) 
     { 
     //Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); 
     } 
     return result; 
    } 
    @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
     if(result==null) 
     { 
      Toast.makeText(getApplicationContext(), "not ok", Toast.LENGTH_LONG).show(); 
     } 
     else 
      Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 

      super.onPostExecute(result); 
     } 

    } 
    ss s=new ss(); 
    s.execute(null,null,null); 
} 

}

+0

FYI - Erprobt die PostData() -Methode in meinem Code und ab 2015-06-14 Methoden und HttpResponse, HttpClient und NameValuePair sind veraltet. Ich konnte es nicht zur Arbeit bringen, aber das war einfach, weil ich die Manifest-Erlaubnis-Hinzufügung von android.permission.INTERNET vergessen hatte. Dieser Code funktioniert. – raddevus

Verwandte Themen