J'ai cette chaîne JSON. Je souhaite POST l’afficher sur le serveur (c’est-à-dire à l’aide de la méthode POST). Comment cela peut-il être fait dans Android?
Chaîne JSON:
{
"clientId": "ID:1234-1234",
"device": {
"userAgent": "myUA",
"capabilities": {
"sms": true,
"data": true,
"gps": true,
"keyValue": {
"Key2": "MyValue2",
"Key1": "myvalue1"
}
},
"screen": {
"width": 45,
"height": 32
},
"keyValue": {
"DevcKey2": "myValue2",
"DevcKey1": "myValue1"
}
},
"time": 1294617435368
}
Comment puis-je former ce tableau JSON et POST au serveur?
Je l'ai fait moi-même.
JSONObject returnedJObject= new JSONObject();
JSONObject KeyvalspairJObject=new JSONObject ();
JSONObject devcKeyvalspairJObject=new JSONObject ();
JSONObject capabilityJObject=new JSONObject();
JSONObject ScreenDimensionsJObject =new JSONObject();
JSONObject deviceJObject= new JSONObject();
try{
KeyvalspairJObject.put("key1","val1");
KeyvalspairJObject.put("key2","val2");
capabilityJObject.put("sms", false);
capabilityJObject.put("data", true);
capabilityJObject.put("gps", true);
capabilityJObject.put("wifi", true);
capabilityJObject.put("keyValue", KeyvalspairJObject);
ScreenDimensionsJObject.put("width", 45);
ScreenDimensionsJObject.put("height", 45);
devcKeyvalspairJObject.put("Devckey1","val1");
devcKeyvalspairJObject.put("DEVCkey2","val2");
deviceJObject.put("userAgent", "MYUserAgent");
deviceJObject.put("capabilities", capabilityJObject);
deviceJObject.put("screen", ScreenDimensionsJObject);
deviceJObject.put("keyValue", devcKeyvalspairJObject);
returnedJObject.put("clientId", "ID:1234-1234");
returnedJObject.put("carrier","TMobile");
returnedJObject.put("device",deviceJObject);
returnedJObject.put("time",1294617435);
returnedJObject.put("msisdn","1234567890");
returnedJObject.put("timezone","GMT");
}
catch(JSONException e)
{
}
et c’est ainsi que nous pouvons envoyer des données JSON au serveur.
public String putDataToServer(String url,JSONObject returnedJObject) throws Throwable
{
HttpPost request = new HttpPost(url);
JSONStringer json = new JSONStringer();
StringBuilder sb=new StringBuilder();
if (returnedJObject!=null)
{
Iterator<String> itKeys = returnedJObject.keys();
if(itKeys.hasNext())
json.object();
while (itKeys.hasNext())
{
String k=itKeys.next();
json.key(k).value(returnedJObject.get(k));
Log.e("keys "+k,"value "+returnedJObject.get(k).toString());
}
}
json.endObject();
StringEntity entity = new StringEntity(json.toString());
entity.setContentType("application/json;charset=UTF-8");
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
request.setHeader("Accept", "application/json");
request.setEntity(entity);
HttpResponse response =null;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpConnectionParams.setSoTimeout(httpClient.getParams(), Constants.Android_CONNECTION_TIMEOUT*1000);
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),Constants.Android_CONNECTION_TIMEOUT*1000);
try{
response = httpClient.execute(request);
}
catch(SocketException se)
{
Log.e("SocketException", se+"");
throw se;
}
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while((line = reader.readLine()) != null){
sb.append(line);
}
return sb.toString();
}
Si vous avez déjà JSON en tant que chaîne, il vous suffit d'utiliser POST à l'aide d'une connexion HTTP classique (URL.openConnection ()). Pas besoin d'analyser ou quelque chose comme ça.
Regardez ce code
https://Gist.github.com/9457c486af9644cf6b18
Voir les retrieveJSONArray (ArrayList jsonArray, String [] clé)} et retrieveJSONString (ArrayList jsonObject)}.
JSONObject returnedJObject= new JSONObject();
url = "http://49.50.76.75/website/exxx/api.php";
// makeSignupRequest();
try {
returnedJObject.put("email",eemail);
returnedJObject.put("password",passwrd);
returnedJObject.put("type","customer");
returnedJObject.put("method","register");
returnedJObject.put("username",usr);
try {
putDataToServer(url, returnedJObject);
}
catch (Throwable m) {
m.printStackTrace();
}
}
vous pouvez également utiliser Httpurlconnection s'il vous plaît vérifier le lien et vous obtenez plus d'idée. ou Httpsurlconnection
SI ceci est autre chose qu'une application "Hobby" avec seulement un ou deux appels de service à effectuer, je considérerais une bibliothèque asynchrone HTTP ou REST.
Plusieurs solutions méritent d’être examinées, notamment Volley de Google: https://developer.Android.com/training/volley/index.html
et rééquipement de Square: http://square.github.io/retrofit
Volley est une bonne bibliothèque HTTP asynchrone à usage général, tandis que Retrofit se concentre spécifiquement sur la mise en œuvre d'un client REST.
Ces deux bibliothèques traiteront une grande partie des détails de bas niveau que vous avez traités dans votre exemple.
Que vous continuiez à utiliser votre code DefaultHttpClient, ou à utiliser Volley ou Retrofit, vous voudrez certainement vous assurer que vos demandes réseau se produisent sur un thread en arrière-plan afin de ne pas bloquer le thread de l'interface utilisateur. Votre exemple ne permet pas de savoir si vous le faites.