J'essaie de récupérer l'objet JSON de mon serveur de flacon, mais seulement la chose
Retun est OK String. `
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");
}
}
}
3 Réponses :
Je soupçonne que votre problème est qui semble tenter de convertir une réponse, plutôt que le contenu de la réponse, JSON. P> P>
Je vérifie avec différentes données d'objet JSON = {"" NBHGGHFGHD "," Description ":" DDDDDDDDDDDDDDDDDDDDDADDDDDDDDDDDDADDDDDDDDDDDADDDDDDDDDDDDADDDDDDDDTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTE (DATA) Imprimer (RES) Imprimer (JSONIFY (DATA))
Mon java est rouillé. Ça va être quelque chose comme jsonObject (réponse.getenity (). GetContent ()) code>
Avez-vous essayé ceci: Votre sortie sera dans notre navigateur: p>
Avec le message postal, nous n'aurons pas une chaîne lisible au navigateur. Je résolvai le problème postera la solution
Le problème était avec GetResponsestream
mis à jour surpostexecute P> 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 );
}
Votre question n'a pas de sens. Pour un démarrage, le ballon n'est pas un serveur i>.
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é