0
votes

Comment retourner l'objet JSON à partir de la fiole

J'essaie de récupérer l'objet JSON de mon serveur de flacon, mais seulement la chose Retun est OK String. XXX PRE>

` Après avoir reçu Post Msg, je suis capable d'imprimer une chaîne reçue mais une réponse EST TOUJOURS OK. P>

Output at server after receiving POST msg.
Hello XYZ ABC
127.0.0.1 - - [09/Feb/2019 16:15:06] "POST /search/ HTTP/1.1" 200 -
<Response 42 bytes [200 OK]>

Error at client side
D/Received Joson Exp: org.json.JSONException: Value OK of type 
java.lang.String cannot be converted to JSONObject

package com.example.serverconnection;
import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONObject;
import org.json.JSONException;

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class ConnectServer {

//reason for 10.0.2.2 is 
https://developer.android.com/studio/run/emulator- 
networking
String SearchURL = "http://10.0.2.2:5000/search/";
JSONObject searchResponse;
//String SearchURL = "http://stackoverflow.com";
String SearchData;
private class HTTPAsyncTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... strings) {
        return getResponseFromServer(strings[0]);
    }

    @Override
    protected void onPostExecute(String Response){
        if (Response != null) {
            try {
                searchResponse = new JSONObject(Response);
                Log.d("Received", Response);
            } catch (JSONException e) {
                Log.d("Received Joson Exp", e.toString());;
            }

        }
    }
}

public void SendSearchData(String data){
    SearchData = data;
    new HTTPAsyncTask().execute(SearchURL);
}

private String getResponseFromServer(String targetUrl){
    try {
        //creating Http URL connection
        URL url = new URL(targetUrl);
        HttpURLConnection urlConnection = (HttpURLConnection) 
 url.openConnection();
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-Type", 
"application/json");

        //building json object
        JSONObject jsonObject = CreateSearchJson();



        //Creating content to sent to server
        CreateDatatoSend(urlConnection, jsonObject);

        //making POST request to URl
        urlConnection.connect();



        //return response message
        return urlConnection.getResponseMessage();

    } catch (MalformedURLException e) {
        Log.d("JCF","URL failed");
    } catch (IOException e) {
        Log.d("JCF","IO Exception getResponseFromServer");;
    }
    return null;
 }

private JSONObject CreateSearchJson() {

    JSONObject jsonsearchObject = new JSONObject();
    try{
        jsonsearchObject.put("searchString",SearchData);
        return jsonsearchObject;
    }catch (JSONException e){
        Log.d("JCF","Can't format JSON OBject class: Connect servet Method 
: 
CreateSearchJson");
    }
    return null;
}

private void CreateDatatoSend(HttpURLConnection urlConnection,JSONObject 
JObject){
    try {
        urlConnection.setDoOutput(true);
        urlConnection.setChunkedStreamingMode(0);
        Log.d("JCF",JObject.toString());
        OutputStream os = new 
BufferedOutputStream(urlConnection.getOutputStream());
        //writeStream(os);

        //BufferedWriter writer = new BufferedWriter(new 
OutputStreamWriter(os, "UTF-8"));
        //writer.write(JObject.toString());
        //Log.i(MainActivity.class.toString(), JObject.toString());
        os.write(JObject.toString().getBytes());
        os.flush();
        //writer.flush();
        //writer.close();
        os.close();
    } catch (IOException e) {
        Log.d("JCF","set Post failed CreateDatatoSend");
    }

  }
}


11 commentaires

Votre question n'a pas de sens. Pour un démarrage, le ballon n'est pas un serveur .


Nous pouvons utiliser le ballon pour la programmation du serveur.


Si Java ne peut pas décoder la réponse, je pense que c'est de ce côté


Non, vous ne pouvez pas utiliser de ballon pour la programmation backend.


Imprimer (JSONIFY (DATA)) Imprimez la sortie comme «OK ', je m'attends à ce que l'objet JSON ici.


Le ballon peut être utilisé pour recevoir et renvoyer l'objet JSON en utilisant la méthode http post.


Message chez 127.0.0.1:5000 -> Bienvenue sur Data Mining


OK, alors comment envoyez-vous des données de l'avant? Ceci est sans réponse


Il y a plusieurs façons, on utilise un outil de facteur, d'autres écrives votre propre JavaScript, Android Studio, etc.


S'il vous plaît montrer le code côté Java


@ Davew.smith ajouté


3 Réponses :


1
votes

Je soupçonne que votre problème est xxx

qui semble tenter de convertir une réponse, plutôt que le contenu de la réponse, JSON.


2 commentaires

Je vérifie avec différentes données d'objet JSON = {"" NBHGGHFGHD "," Description ":" DDDDDDDDDDDDDDDDDDDDDADDDDDDDDDDDDADDDDDDDDDDDADDDDDDDDDDDDADDDDDDDDTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTE (DATA) Imprimer (RES) Imprimer (JSONIFY (DATA)) Ma taille de réponse augmente à 128 octets. Vous avez raison, je dois analyser la réponse et non le statut, mais comment puis-je faire ça


Mon java est rouillé. Ça va être quelque chose comme jsonObject (réponse.getenity (). GetContent ())



0
votes

Avez-vous essayé ceci: xxx

Votre sortie sera dans notre navigateur: xxx


1 commentaires

Avec le message postal, nous n'aurons pas une chaîne lisible au navigateur. Je résolvai le problème postera la solution



0
votes

Le problème était avec GetResponsestream

mis à jour surpostexecute P> xxx pré>

mise à jour crééeAtoTosend URLConnection GetinPtStream () p>

    private void ReadReceivedJson(){
    Log.d("Full Received", fullresponse );
    try {
        searchResponse = new JSONObject(fullresponse);
    } catch (JSONException e) {
        Log.d("Received Joson Exp", e.toString());
    }
    try {
        JSONArray arrJson = searchResponse.getJSONArray("Movie");
        String Moviearr[] = new String[arrJson.length()];
        for(int i = 0; i < arrJson.length(); i++) {
            Moviearr[i] = arrJson.getString(i);
            Log.d("Movie", Moviearr[i]);
        }
    } catch (JSONException e) {
        Log.d("No Movie", fullresponse );
    }


0 commentaires