Android_JSON

19114 ワード

データ転送フォーマット


  • XML
  • ラベルを使用するため、データが多ければ多いほどボリュームが大きくなります.
  • Parsingは難しいです
  • CSV
  • 容量は小さいが、可読性は悪い.
  • JSON
  • プロパティ-値ペアからなるデータを渡すための標準フォーマット
  • を開きます.

    実習

  • 映画興行ランキング

  • 完全なソース
    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:要求と応答の結果を文字列で受信するオブジェクト

  • 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) {
                        
                        
                     }
                 }
               );
  • 新StringRequest(データ伝送方式、要求アドレス、応答リスナー、リスナー)
  • .
  • データ伝送方式:GETまたはPOST
  • リクエストアドレス:リクエスト数
    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に配置します.