このJSON文字列があります。 POSTこれをサーバーに送信します(POSTメソッドを使用して)。これはAndroidでどのように実行できますか?
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
}
このJSON配列とPOSTそれをサーバーに送信するにはどうすればよいですか?
私はそれを自分でやりました。
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)
{
}
これがJSONデータをサーバーに送信する方法です。
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();
}
JSONが既にStringである場合は、POST通常のHTTP接続(URL.openConnection())を使用してそれを解析します)解析する必要はありません。
このコードを見てください
https://Gist.github.com/9457c486af9644cf6b18
retrieveJSONArray(ArrayList jsonArray、String [] key)および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();
}
}
Httpurlconnection を使用することもできます。リンクを確認してください。または Httpsurlconnection
これが1つまたは2つのサービス呼び出しを行う「趣味」アプリ以外の場合は、非同期HTTPまたはRESTライブラリを確認することを検討します。
GoogleのVolleyを含め、検討する価値のあるものがいくつかあります。 https://developer.Android.com/training/volley/index.html
squareからのレトロフィット: http://square.github.io/retrofit
Volleyは優れた汎用非同期HTTPライブラリですが、Retrofitは特にRESTクライアントの実装に集中しています。
これらのライブラリはどちらも、例で扱っている低レベルの詳細の多くを処理します。
DefaultHttpClientコードを引き続き使用する場合でも、VolleyやRetrofitを使用する場合でも、UIスレッドをブロックしないように、バックグラウンドスレッドでネットワーク要求が発生することを確認する必要があります。あなたがそれをしているのかどうかはあなたの例から明らかではありません。