Android_JSON
19114 ワード
データ転送フォーマット
実習
完全なソース
package com.example.ex0419;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class JsonActivity extends AppCompatActivity {
TextView tvJSON;
RequestQueue queue;
StringRequest request;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
tvJSON = findViewById(R.id.tvJSON);
queue = Volley.newRequestQueue(JsonActivity.this);
int method = Request.Method.GET;
String url = "https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20220418";
request = new StringRequest(
method,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject obj = new JSONObject(response);
JSONObject result = obj.getJSONObject("boxOfficeResult");
JSONArray jsonArray = result.getJSONArray("dailyBoxOfficeList");
String data = "";
StringBuffer sb = new StringBuffer();
for(int i=0; i<jsonArray.length(); i++){
JSONObject movie = jsonArray.getJSONObject(i);
String rank = movie.getString("rank");
String movieNm = movie.getString("movieNm");
sb.append(rank);
sb.append(".");
sb.append(movieNm);
sb.append("\n");
}
tvJSON.setText(sb.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(JsonActivity.this,
error.toString(),
Toast.LENGTH_SHORT).show();
}
}
);
queue.add(request);
}
}
ソース解析
要求と応答を宣言するオブジェクト
RequestQueue queue;
StringRequest request;
StringRequestオブジェクトの作成と初期化
request = new StringRequest(
Request.Method.GET,
URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
ex)http:~ or https:~
OSN形式に変更
try~catch文を使用します.オブジェクトに変更するとエラーが発生する可能性があります.
try {
JSONObject obj = new JSONObject(response); // 1
JSONObject result = obj.getJSONObject("boxOfficeResult"); //2
JSONArray jsonArray = result.getJSONArray("dailyBoxOfficeList"); //3
String data = "";
StringBuffer sb = new StringBuffer();
for(int i=0; i<jsonArray.length(); i++){
JSONObject movie = jsonArray.getJSONObject(i);
String rank = movie.getString("rank");
String movieNm = movie.getString("movieNm");
sb.append(rank);
sb.append(".");
sb.append(movieNm);
sb.append("\n");
}
tvJSON.setText(sb.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
コメント1:文字列データに変換->JSONオブジェクト
2号:JSONオブジェクトから「boxOfficeResult」へアクセス
3号:アクセスしたデータ(JSOnObject)から「DayBoxOfficeList」までJSOnArrayデータにアクセスする
StringBufferを使用して大量のテキストを処理し、配列内の各オブジェクトをJSOnObject movieに配置します.
Reference
この問題について(Android_JSON), 我々は、より多くの情報をここで見つけました https://velog.io/@dfdf/AndroidJSONテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol