다음 JSON 텍스트를 보내고 싶습니다.
{"Email":"aaa@tbbb.com","Password":"123456"}
웹 서비스에 연결하고 응답을 읽습니다. JSON을 읽는 방법을 알고 있습니다. 문제는 위의 JSON 객체를 변수 이름으로 보내야한다는 것 jason
입니다.
Android에서 어떻게 할 수 있습니까? 요청 객체 생성, 콘텐츠 헤더 설정 등과 같은 단계는 무엇입니까?
답변
Android에는 HTTP 송수신을위한 특수 코드가 없으므로 표준 Java 코드를 사용할 수 있습니다. Android와 함께 제공되는 Apache HTTP 클라이언트를 사용하는 것이 좋습니다. 다음은 HTTP POST를 보내는 데 사용한 코드 스 니펫입니다.
“jason”이라는 변수로 개체를 보내는 것이 어떤 것과 관련이 있는지 이해하지 못합니다. 서버가 정확히 무엇을 원하는지 잘 모르겠다면 어떤 형식이 필요한지 알 때까지 다양한 문자열을 서버에 보내는 테스트 프로그램을 작성하는 것이 좋습니다.
int TIMEOUT_MILLISEC = 10000; // = 10 seconds
String postMessage="{}"; //HERE_YOUR_POST_STRING.
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(serverUrl);
request.setEntity(new ByteArrayEntity(
postMessage.toString().getBytes("UTF8")));
HttpResponse response = client.execute(request);
답변
Apache HTTP Client를 사용하면 Android에서 json 객체를 쉽게 보낼 수 있습니다. 이를 수행하는 방법에 대한 코드 샘플은 다음과 같습니다. UI 스레드를 잠그지 않도록 네트워크 활동에 대한 새 스레드를 만들어야합니다.
protected void sendJson(final String email, final String pwd) {
Thread t = new Thread() {
public void run() {
Looper.prepare(); //For Preparing Message Pool for the child Thread
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
HttpResponse response;
JSONObject json = new JSONObject();
try {
HttpPost post = new HttpPost(URL);
json.put("email", email);
json.put("password", pwd);
StringEntity se = new StringEntity( json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);
response = client.execute(post);
/*Checking response */
if(response!=null){
InputStream in = response.getEntity().getContent(); //Get the data in the entity
}
} catch(Exception e) {
e.printStackTrace();
createDialog("Error", "Cannot Estabilish Connection");
}
Looper.loop(); //Loop in the message queue
}
};
t.start();
}
Google Gson 을 사용 하여 JSON을 보내고 검색 할 수도 있습니다 .
답변
public void postData(String url,JSONObject obj) {
// Create a new HttpClient and Post Header
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(myParams, 10000);
HttpConnectionParams.setSoTimeout(myParams, 10000);
HttpClient httpclient = new DefaultHttpClient(myParams );
String json=obj.toString();
try {
HttpPost httppost = new HttpPost(url.toString());
httppost.setHeader("Content-type", "application/json");
StringEntity se = new StringEntity(obj.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(se);
HttpResponse response = httpclient.execute(httppost);
String temp = EntityUtils.toString(response.getEntity());
Log.i("tag", temp);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
}
답변
HttpPost
Android Api 레벨 22에서 더 이상 사용되지 않습니다 HttpUrlConnection
.
public static String makeRequest(String uri, String json) {
HttpURLConnection urlConnection;
String url;
String data = json;
String result = null;
try {
//Connect
urlConnection = (HttpURLConnection) ((new URL(uri).openConnection()));
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
urlConnection.setRequestMethod("POST");
urlConnection.connect();
//Write
OutputStream outputStream = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
writer.write(data);
writer.close();
outputStream.close();
//Read
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
bufferedReader.close();
result = sb.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
답변
아래 링크에는 놀랍도록 멋진 Android HTTP 용 라이브러리가 있습니다.
http://loopj.com/android-async-http/
간단한 요청은 매우 쉽습니다.
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
JSON을 보내려면 ( https://github.com/loopj/android-async-http/issues/125 에서`voidberg ‘에 대한 크레딧 ) :
// params is a JSONObject
StringEntity se = null;
try {
se = new StringEntity(params.toString());
} catch (UnsupportedEncodingException e) {
// handle exceptions properly!
}
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
client.post(null, "www.example.com/objects", se, "application/json", responseHandler);
모두 비동기식이며 Android에서 잘 작동하며 UI 스레드에서 안전하게 호출 할 수 있습니다. responseHandler는 생성 한 동일한 스레드 (일반적으로 UI 스레드)에서 실행됩니다. JSON에 대한 내장 resonseHandler도 있지만 Google gson을 사용하는 것을 선호합니다.
답변
이제는 HttpClient
더 이상 사용되지 않으므로 현재 작업 코드는를 HttpUrlConnection
사용하여 연결을 만들고 연결에서 읽고 쓰는 것입니다. 하지만 저는 Volley를 선호했습니다 . 이 라이브러리는 Android AOSP에서 가져온 것입니다. 내가하기 위해 사용하는 매우 쉽게 발견 JsonObjectRequest
또는JsonArrayRequest
답변
이것보다 간단 할 수는 없습니다. OkHttpLibrary 사용
JSON 만들기
JSONObject requestObject = new JSONObject();
requestObject.put("Email", email);
requestObject.put("Password", password);
이렇게 보내주세요.
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.addHeader("Content-Type","application/json")
.url(url)
.post(requestObject.toString())
.build();
okhttp3.Response response = client.newCall(request).execute();