HttpResponse에서 json 가져오기
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://my.server:8080/android/service.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("action", "getjson"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
service.php
json 문자열을 생성합니다.내가 어떻게 그것을 내 것에서 가져올까?response
그건 그렇고, 내가 얼려놨어요GSON
도서관, 혹시 어떤 방법을 사용해도 될까요?
이와 유사한 솔루션은 매우 보기 흉합니다.imo: httpresponse Android에서 json을 처리하는 가장 좋은 방법입니다.
더 좋은 방법이 많이 있지?
어떤 도움이라도 감사합니다.
업데이트:
String json = EntityUtils.toString(response.getEntity());
효과가 있는 것 같아요단 한 가지 작은 문제가 있습니다.문자열은 괄호로 둘러싸여 있습니다.[]
수동으로 삭제해야 합니까?php:s에 의해 생성됩니다.json_encode()
당신이 부딪치고 있는 문제는 제가 방금 부딪힌 것과 비슷한 문제인 것 같습니다.실행하는 경우:
문자열 json_string = EntityUtils.toString(response.getEntity()); JSONObject temp1 = 새로운 JSONObject(json_string);
위의 코드는 예외를 발생시키고 JSON 어레이 브래킷에 문제가 있는 것 같습니다.그러나 JSON 어레이를 최상위 요소로 사용하는 것은 좋습니다.JSONObject 대신 JSONArray()를 사용하면 됩니다.
문자열 json_string = EntityUtils.toString(response.getEntity()); JSONArray temp1 = 새로운 JSONArray(json_string);
따라서 JSON 코드 내의 JSONObject인 JSONArray 또는 단일 사전을 얻을 수 있는지 확인해야 합니다.
iOS/Objective-C JSON 파싱 라이브러리에 익숙하다면 json 사전과 json 배열에 동일한 최상위 요소를 사용하기 때문에 JAVA/Android 월드로 이동하면 반환되는 최상위 레벨에 따라 두 가지 유형의 JSON을 처리하는 것이 혼란스럽습니다.
이 클래스에서는 서버 또는 자산 폴더에서 JSON 데이터를 가져올 수 있습니다.둘 중 하나로 쉽게 변경할 수 있습니다.어댑터가 필요한 경우 getHub에서 작성한jgilfelt를 사용합니다.
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle getArgs = this.getArguments();
String URI = getArgs.getString(KEY_URI);//OR YOU CAN HARD CODE THIS OR GET THE STRING ANYWAY YOU LIKE.
new GetJSONTask().execute(URI);
}
class GetJSONTask extends AsyncTask<String, Integer, String> {
protected String doInBackground(String... arg0) {
String uri = arg0[0];
InputStream is = null;
if (uri.contains("http") == true) {// Get JSON from URL
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(uri);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((line = rd.readLine()) != null) {
json += line;
}
rd.close();
return json;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} else {// Get JSON from Assets
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
InputStream jsonFile = getActivity().getAssets().open(uri);
Reader reader = new BufferedReader(new InputStreamReader(jsonFile, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
jsonFile.close();
} catch (IOException e) {
e.printStackTrace();
}
json = writer.toString();
// return JSON String
return json;
}
}
@Override
protected void onPostExecute(String result) {
try {
showData(result);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getActivity(), "something went wrong", Toast.LENGTH_SHORT).show();
}
}
}
private void showData(String json) throws JSONException {
JSONObject o = new JSONObject(json);
JSONArray data = o.getJSONArray("results");
}
}
웹 서비스에서 JSON 문자열을 반환할 경우 보통 다음과 같이 JSON 개체로 되돌립니다.
String response = client.getResponse();
if (responseCode == 200)
{
JSONObject obj = new JSONObject(response);
}
문제는 제 php 파일에 있었습니다.json 인코딩된 개체에서 컨테이너 배열을 제거하여 Java 코드가 작동하게 되었습니다.
언급URL : https://stackoverflow.com/questions/11129286/get-json-from-httpresponse
'IT' 카테고리의 다른 글
원인: org.apache.logging.log4j.Logging Exception: log4j-slf4j-impl은 log4j-to-slf4j와 함께 사용할 수 없습니다. (0) | 2023.02.14 |
---|---|
스프링 부츠 - 이미 부모 폼을 가지고 있는 경우 부모 폼 (0) | 2023.02.14 |
WordPress WooCommerce - WC_Cart 클래스를 사용하여 카트에 변수 제품 추가 (0) | 2023.02.14 |
MongoDB에서 Elastic Search를 사용하는 방법 (0) | 2023.02.14 |
Newtonsoft의 JSON Serializer에서 JSON DateTime 해석 (0) | 2023.02.14 |