7
votes

Android httpclient, défaulttpclient, httppost

Comment envoyer une chaîne de données ( jsonObject.tostring () code>) à une URL. Je veux écrire une méthode statique dans une classe UTIL pour le faire. Je veux que la méthode signature soit la suivante

String String String String PostData (String URL, String PostData) Jette SomecustomException Code> P>

Que doit être le format de l'URL de chaîne P>

La chaîne de retour correspond à la réponse du serveur sous la forme d'une représentation de chaîne des données JSON. p>

EDIT H3>

Connexion actuelle UTIL H3>
package my.package;
import my.package.exceptions.CustomException;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;


 public class ConnectionUtil {

 public static String postData(String url, String postData)
        throws CustomException {

    // Create a new HttpClient and Post Header
    InputStream is = null;
    StringBuilder sb = null;
    String result = "";
    HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost();
    httppost.setHeader("host", url);

    Log.v("ConnectionUtil", "Opening POST connection to URI = " + httppost.getURI() + " url = " + URLDecoder.decode(url));

    try {
        httppost.setEntity(new StringEntity(postData));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection " + e.toString());
        e.printStackTrace();
        throw new CustomException("Could not establish network connection");
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"), 8);
        sb = new StringBuilder();
        sb.append(reader.readLine() + "\n");
        String line = "0";

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        is.close();
        result = sb.toString();

    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
        throw new CustomException("Error parsing the response");
    }
    Log.v("ConnectionUtil", "Sent: "+postData);
    Log.v("ConnectionUtil", "Got result "+result);
    return result;

}

}


1 commentaires

Je pense qu'il y a un problème avec votre méthode postale envoi de stringentity à la fin du serveur .. Consultez ma dernière réponse et voyez si cela fonctionne ..


4 Réponses :


1
votes

Essayez d'utiliser cette méthode où Strjsonrequest est la chaîne JSON que vous souhaitez poster et que la Strurl est l'URL à laquelle vous souhaitez publier le strjsonrequest xxx

et la méthode ConverTreamtostring () est comme Ci-dessous xxx


3 commentaires

Quelle est la méthode conversationtreamtostring ?


Quel devrait être le format URL? Je reçois un malformedurlexception


Je ne suis pas sûr de quelle est l'URL que vous obtenez dans le logcat vérifie une fois que c'est la même chose que vous avez passée



0
votes

Selon la configuration de votre code côté serveur, un exemple de format de l'URL où votre serveur a une page PHP pour gérer l'appel de l'API serait le suivant:

http://yoururl.com/demo.php


1 commentaires

Le serveur accepte une connexion post. Donc, j'ai juste besoin de l'URL comme http://www.example.com/my_page.php , non?



2
votes

Eh bien, voici mes pensées sur votre question: -

  1. Premièrement, vous devez simplement envoyer les données au serveur à l'aide de Publier code> méthode. C'est facile et absolument possible dans Android également. Un simple code de code pour l'envoi de post code> peut être comme: p>

    String jsonData = EntityUtils.toString(serverResponse.getEntity());
    


4 commentaires

Je n'utilise pas de forme. Le serveur veut simplement voir les données de chaîne. c'est tout.


@Phodu_insaan Même pour l'envoi de données de chaîne, vous devez envoyer des données post sur le serveur. Donc, vous n'avez pas besoin d'utiliser un formulaire pour envoyer des données de chaîne sur le serveur. Et si vous voulez simplement simplement envoyer des commandes, comme en passant un seul paramètre sur le serveur, vous pouvez également penser à utiliser Get Method. Je peux vous aider avec beaucoup.


Je fais presque la même chose. Au lieu de passer un urlencodedormenté je passe un nouvelle stringentity avec mes données de chaîne. Je reçois un nullpointException . Il suffit d'ajouter ma sortie de logcat à la question.


Oui, plz ajoutez votre sortie logcat ici .. Et je ne suis pas capable de vous mettre, comment passez-vous une stringentité? Veuillez ajouter votre code également qui effectue cette tâche .. Cela aidera à comprendre votre problème de manière meilleure ..



2
votes

Je pense que dans votre code, le problème de base est causé par la façon dont vous utilisez stringentity à POST paramètres sur votre URL. Vérifiez si le code suivant aide à afficher vos données au serveur à l'aide de stringentity . xxx

espère que cela aide à résoudre votre problème. Merci.


2 commentaires

Salut. Je pense que cela a aidé mais je reçois toujours une erreur d'exécution inconnueHostException. Je suis sûr que mon URL fonctionne et vérifiée de mon navigateur. Je reçois aussi la même erreur pour google.com ou exemple.com. Comment dois-je formater l'URL / URI? Je veux appuyer sur l'URL http://xyz.mysite.com/some_page.php/ et publier des données. Dois-je aussi spécifier le port?


Juste en utilisant 80. Donc, cela devrait être par défaut. Cela fonctionne maintenant et frappe le serveur. Merci.