জাভাতে কোনও URL থেকে json পড়ার সহজ উপায় read


245

এই একটি মূক প্রশ্ন হতে পারে কিন্তু কি পড়া এবং বিশ্লেষণ করতে সহজ উপায় তাদেরকে JSON থেকে URL টি মধ্যে জাভা ?

গ্রোভিতে, এটি কোডের কয়েকটি লাইনের বিষয়। আমি যে জাভা উদাহরণগুলি পেয়েছি সেগুলি হাস্যকরভাবে দীর্ঘ (এবং বিশাল ব্যতিক্রম হ্যান্ডলিং ব্লক রয়েছে)।

আমি যা করতে চাই তা হল এই লিঙ্কটির বিষয়বস্তু পড়তে ।


9
জাভা আপনাকে ঘোষিত যে কোনও ব্যতিক্রম হ্যান্ডেল করতে বাধ্য করার সাথে সাথে ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজনীয়তা রয়েছে। ব্যতিক্রম হ্যান্ডলিংয়ে কী সমস্যা?
ফালমারি

3
ঠিক আছে, "জাভা আপনাকে বলুন" সবচেয়ে বড় সমস্যা
জোনাটান ক্লিউটিয়ার

9
যদি জাভা আপনাকে ব্যতিক্রমগুলি পরিচালনা করতে বাধ্য না করে তবে আপনি কি মনে করেন যে প্রোগ্রামগুলি এখনও চলবে এবং ভাল চলবে? যদি আমাকে আমার বয়সকে কোনও প্রোগ্রামে ইনপুট করতে বলা হয় এবং আমি আমার ইনপুট হিসাবে স্নায়ারফ্ল্যাব্লগার দিয়েছি? জাভা কি কোনও সমস্যা ছাড়াই প্রোগ্রামটি চালানোর অনুমতি দেবে? আপনি যদি ব্যতিক্রমগুলি পরিচালনা করতে চান না তবে তাদের যে পদ্ধতিতে ঘটতে পারে তার দ্বারা নিক্ষেপ হিসাবে ঘোষণা করুন এবং যখন কোনও বিষয় পুরোপুরি সঠিক না হয় তখন আপনার প্রোগ্রামটি ব্যর্থ হয় দেখুন।
রিচার্ড বার্কার

2
মোটেও বোবা প্রশ্ন নয়। বিশেষত পিএইচপি থেকে আসছে যেখানে আপনি এটির সাথে এটি করতে json_decode(file_get_contents($url));এবং করতে পারেন !
dtbarne

উত্তর:


193

মাভেন আর্টিফ্যাক্ট ব্যবহার করে org.json:jsonআমি নিম্নলিখিত কোড পেয়েছি, যা আমার কাছে মনে হয় বেশ ছোট। যতটা সম্ভব সংক্ষিপ্ত নয়, তবে এখনও ব্যবহারযোগ্য।

package so4308554;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;

import org.json.JSONException;
import org.json.JSONObject;

public class JsonReader {

  private static String readAll(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
      sb.append((char) cp);
    }
    return sb.toString();
  }

  public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
    InputStream is = new URL(url).openStream();
    try {
      BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
      String jsonText = readAll(rd);
      JSONObject json = new JSONObject(jsonText);
      return json;
    } finally {
      is.close();
    }
  }

  public static void main(String[] args) throws IOException, JSONException {
    JSONObject json = readJsonFromUrl("https://graph.facebook.com/19292868552");
    System.out.println(json.toString());
    System.out.println(json.get("id"));
  }
}

3
চরিত্র অনুসারে চরিত্রটি পড়ার পরিবর্তে আপনি বাফারড্রেডারে রিডলাইন () ব্যবহার করতে পারেন। এটি while লুপের পুনরাবৃত্তির সংখ্যা হ্রাস করবে।
kdabir

6
কিসের জন্য? readLineফাংশন লুপ তারপর কি করতে হবে, এবং আমি, অক্ষরের পরিবর্তে লাইন কনক্যাটেনেট যা আরো ব্যয়বহুল আছে। কোডটি এখনকার মতো সংক্ষিপ্ত রাখবে না। তদ্ব্যতীত, জেএসওএন স্বরলিপিটিতে "লাইনগুলি" ধারণার কোনও ধারণা নেই, তবে আমি কেন সেগুলি পড়ব?
রোল্যান্ড ইলিগ

4
অ্যাপাচি কমন্স-আইও এর IOUtils.toString(InputStream)পদ্ধতিটি বিবেচনা করুন । এটি আপনার কিছু লাইন এবং দায়িত্ব সঞ্চয় করা উচিত should
মার্ক টিলেম্যানস

3
আমি কেন এই ত্রুটিটি পাচ্ছি "জেএসওএনওজেক্ট জেসসনের লাইনে" কনস্ট্রাক্টর জেএসএনওবজেক্ট (স্ট্রিং) অপরিবর্তিত "; নতুন জেএসএনওবজেক্ট (জসনটেক্সট); "রিডজসনফ্রমআরল" পদ্ধতিতে ..? @ রোল্যান্ডইলিগ
কার্তিক

2
জিএসওএন, জ্যাকসন, বুন, জেনসন এবং অন্যান্যদের সাথে আপনার কেবল উত্সটি খাওয়াতে হবে: হয় কেবলমাত্র ইউআরএল, বা সর্বাধিক InputStream। উপরের কোডটি org.jsonব্যবহারের জন্য সংক্ষিপ্ত হতে পারে , তবে অন্যান্য লিবস উপলব্ধ যাচাই করে নিন তা নিশ্চিত করুন - এই কাজের জন্য কোডের ২-৩ টির বেশি লাইনের প্রয়োজন নেই।
স্ট্যাকসমান

68

এখানে জ্যাকসনের সাথে বেশ কয়েকটি বিকল্প সংস্করণ রয়েছে (যেহেতু আপনি একাধিক উপায়ে ডেটা চাইতে পারেন):

  ObjectMapper mapper = new ObjectMapper(); // just need one
  // Got a Java class that data maps to nicely? If so:
  FacebookGraph graph = mapper.readValue(url, FaceBookGraph.class);
  // Or: if no class (and don't need one), just map to Map.class:
  Map<String,Object> map = mapper.readValue(url, Map.class);

এবং বিশেষতঃ জাভা বিষয়বস্তুগুলির সাথে আপনি যে সাধারণ (আইএমও) লেনদেন করতে চান সে ক্ষেত্রে একটি লাইনার তৈরি করা যেতে পারে:

FacebookGraph graph = new ObjectMapper().readValue(url, FaceBookGraph.class);

গসনের মতো অন্যান্য লিবিও এক-লাইন পদ্ধতি সমর্থন করে; কেন অনেক উদাহরণ দেখায় যে দীর্ঘতর বিভাগগুলি বিজোড়। আরও খারাপ এটি হ'ল অনেক উদাহরণ অপ্রচলিত org.json লাইব্রেরি ব্যবহার করে; এটি প্রায় প্রথম জিনিস হতে পারে, তবে অর্ধ ডজন ভাল বিকল্প আছে তাই এটি ব্যবহার করার খুব কম কারণ আছে।


এখানে url কি? এটি স্ট্রিং বা ইউআরএল অবজেক্ট বা বাইট []?
দিনেশ

1
আমি চিন্তা ছিল java.net.URLকিন্তু হয় এক কাজ, পাশাপাশি অন্যান্য উৎস প্রচুর ( File, InputStream, Reader, String)।
স্টেক্সম্যান

4
এটা তোলে উচিত উপরোক্ত উদাহরণের java.net.URL হও, অন্যথায় এটি পার্স স্ট্রিং চেষ্টা করবে 'HTTP: // ....' একটি JSON, যা একটি ত্রুটি উত্পাদ হবে
zbstof

@ জোটোভ হ্যাঁ পাস Stringকরার জন্য সামগ্রীগুলি JSON হতে হবে এবং ব্যবহারের জন্য ইউআরআই / ইউআরএলটির পাঠ্য এনকোডিং নয়।
স্টেক্সম্যান

2
অজানা টোকেন 'https': প্রত্যাশা করা হয়েছিল ('সত্য', 'মিথ্যা' বা 'নাল')
দামির ওলেজার

60

সবচেয়ে সহজ উপায়: জিএসএন, গুগলের নিজস্ব গোটো জেসন লাইব্রেরি ব্যবহার করুন। https://code.google.com/p/google-gson/

এখানে একটি নমুনা। আমি এই ফ্রি জিওলোকেটর ওয়েবসাইটে যাচ্ছি এবং জসনকে বিশ্লেষণ করে আমার জিপকোডটি প্রদর্শন করছি। (এটি পরীক্ষা করার জন্য এই জিনিসটি কেবল একটি প্রধান পদ্ধতিতে রেখে দিন)

    String sURL = "http://freegeoip.net/json/"; //just a string

    // Connect to the URL using java's native library
    URL url = new URL(sURL);
    URLConnection request = url.openConnection();
    request.connect();

    // Convert to a JSON object to print data
    JsonParser jp = new JsonParser(); //from gson
    JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
    JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object. 
    String zipcode = rootobj.get("zip_code").getAsString(); //just grab the zipcode

1
আমি কেন 'নেটওয়ার্কঅনমেনথ্রেডএক্সসেপশন' ত্রুটি পাচ্ছি? আমার অবশ্যই অ্যাসিঙ্কটাস্ক ব্যবহার করা উচিত বা অন্য কোনও উপায় আছে? এই উদাহরণে আপনি এই ত্রুটিটি পেয়েছেন?
বেনিটজ

টাইপো, হওয়া উচিত:rootobj.get("zip_code").getAsString();
লুপসাম

আমি কীভাবে jsonParser আমদানি করব? আমি সর্বদা ত্রুটিটি পাই: 'ত্রুটি: (69, 9) ত্রুটি: প্রতীক শ্রেণি জাসনপার্সারকে খুঁজে পাচ্ছে না "
MAESTRO_DE

1
আপনার পোমে জেসন পার্স পেতে দয়া করে maven নির্ভরতা <d dependency> <groupId> com.google.code.gson </groupId> <artifactId> gson </artifactId> <version> 2.8.0 </version> </d dependency> যোগ করুন ফাইল।
শশীকান্ত

জিএসনের সাথে টাইপসেফ পদ্ধতিতে সরলীকৃত এবং পরিচালনা করা যায় যেমন: মাইরেস্পোনসঅবজেক্ট প্রতিক্রিয়া = নতুন গসনবিল্ডার ()। তৈরি করুন () ।জসন (নতুন ইনপুটস্ট্রিমআরডার ((ইনপুটস্ট্রিম)) অনুরোধ।
গ্রেগোর

42

আপনি যদি দুটি লাইব্রেরি ব্যবহার করতে আপত্তি না করেন তবে এটি একটি লাইনেই করা যেতে পারে।

অন্তর্ভুক্ত করুন এ্যাপাচি কমন্স IOUtils & json.org লাইব্রেরি।

JSONObject json = new JSONObject(IOUtils.toString(new URL("https://graph.facebook.com/me"), Charset.forName("UTF-8")));

গ্রেডের উপর নির্ভরতা যুক্ত করা কেন এই অ্যাপ্লিকেশনটি আমার গুগল পিক্সেল এক্সএল এ ইনস্টল করা থেকে আটকাবে এ সম্পর্কে আপনার কি কোনও ধারণা আছে?
andrdoiddev

@ অ্যান্ডার্ডয়েডদেব - আপনার এটি আলাদা প্রশ্ন হিসাবে জিজ্ঞাসা করা উচিত। এটি অ্যাপাচি কমন্স, গ্রেডল এবং অ্যান্ড্রয়েড বিকাশে আরও সাধারণ।
ইজরাইটার

1
এটি এখন বেশ পুরানো, তবে এটি এখনও একটি ভাল সমাধান, সুতরাং @ অ্যান্ডার্ডয়েডদেব বা অন্য কারও গ্রেডল নির্ভরতা প্রয়োজন হলে, এইগুলি আমি ব্যবহার করছি: সংকলন গ্রুপ: 'org.json', নাম: 'জেসন ', সংস্করণ:' 20180813 'সংকলন গ্রুপ:' কমন্স-আইও ', নাম:' কমন্স-আইও ', সংস্করণ:' 2.6 '
r02

বলুন যে আপনি একাধিক অনুরোধগুলি ফায়ার করছেন, একটি JSONArray এর জসন প্রতিক্রিয়াগুলি সংরক্ষণ করছেন এবং তারপরে ফাইল রাইটার ব্যবহার করে কোনও ফাইলটিতে JSONArray লিখেছেন, তারপরে এই লাইব্রেরিটি ডাবল উদ্ধৃতিগুলি ছাড়বে না। এটি ফাইলটি সহজেই JSONArray এ আবার পার্স করা যায়।
Gh0sT

6

ইউআরএল এর বিষয়বস্তু দখল করতে HTTPClient ব্যবহার করুন । এবং তারপরে JSON পার্স করার জন্য json.org থেকে লাইব্রেরিটি ব্যবহার করুন । আমি অনেক প্রকল্পে এই দুটি গ্রন্থাগার ব্যবহার করেছি এবং এগুলি ব্যবহারের পক্ষে দৃust় এবং সাধারণ।

তা ছাড়া আপনি ফেসবুক এপিআই জাভা লাইব্রেরি ব্যবহার করে দেখতে পারেন। এই অঞ্চলে আমার কোনও অভিজ্ঞতা নেই তবে জাভাতে ফেসবুক এপিআই ব্যবহার সম্পর্কিত স্ট্যাক ওভারফ্লো নিয়ে একটি প্রশ্ন রয়েছে । আপনি কোনও লাইব্রেরি ব্যবহারের জন্য পছন্দ হিসাবে রেস্টএফবি দেখতে চাইতে পারেন।


5

আমি জাসন পার্সারটি সহজ উপায়ে করেছি, এটি এখানে

package com.inzane.shoapp.activity;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
            System.out.println(line);
        }
        is.close();
        json = sb.toString();

    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
        System.out.println("error on parse data in jsonparser.java");
    }

    // return JSON String
    return jObj;

}
}

এই শ্রেণিটি ইউআরএল থেকে জসন বস্তুটি ফেরত দেয়

এবং যখন আপনি জসন অবজেক্ট চান তখন আপনি কেবল এই ক্লাসটি এবং আপনার ক্রিয়াকলাপ শ্রেণীর পদ্ধতিটিকে কল করুন

আমার কোড এখানে

String url = "your url";
JSONParser jsonParser = new JSONParser();
JSONObject object = jsonParser.getJSONFromUrl(url);
String content=object.getString("json key");

এখানে "json কী" বোঝানো হয়েছে যে আপনার জসন ফাইলের কী

এটি একটি সাধারণ জেসন ফাইলের উদাহরণ

{
    "json":"hi"
}

এখানে "json" কী এবং "হাই" মান

এটি স্ট্রিং সামগ্রীতে আপনার জসন মান পাবে।


1
আমি মনে করি এটি "সহজতম উপায়" নয়
দাঁড়িয়ে থাকুন

3

এটি জার্সি-ক্লায়েন্ট ব্যবহার করে খুব সহজ, কেবল এই খাঁটি নির্ভরতা অন্তর্ভুক্ত করুন:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>2.25.1</version>
</dependency>

তারপরে এই উদাহরণটি ব্যবহার করে এটি প্রার্থনা করুন:

String json = ClientBuilder.newClient().target("http://api.coindesk.com/v1/bpi/currentprice.json").request().accept(MediaType.APPLICATION_JSON).get(String.class);

তারপরে জেএসএনকে পার্স করতে গুগলের জিসন ব্যবহার করুন:

Gson gson = new Gson();
Type gm = new TypeToken<CoinDeskMessage>() {}.getType();
CoinDeskMessage cdm = gson.fromJson(json, gm);

উত্তরের বিপরীতে কিছুই নয়, তবে জার্সি-ক্লায়েন্ট প্যাকেজটি নিয়ে এতগুলি সমস্যা ... এটি ত্রুটির একটি গোলমাল।
জনি বিগুড

আমি এটি নিয়ে কোনও সমস্যার মুখোমুখি হই নি। আপনি কিছু নির্দিষ্টকরণ এবং / বা বিকল্পগুলি নির্দেশ করতে পারেন?
ব্যবহারকারীর 3892260

আমি যে সমস্যাগুলি পেয়েছি সেগুলি ক্লাসনফাউন্ড ত্রুটির সাথে সম্পর্কিত ছিল, কারণ সম্পর্কে ঠিক নিশ্চিত ছিল না, কারণ আমি এটিকে ঠিক করার ব্যবস্থা করে নি।
জনি বিগুড

3

আমি এটি এখন পর্যন্ত সবচেয়ে সহজ উপায় হিসাবে পেয়েছি।

এই পদ্ধতিটি ব্যবহার করুন:

public static String getJSON(String url) {
        HttpsURLConnection con = null;
        try {
            URL u = new URL(url);
            con = (HttpsURLConnection) u.openConnection();

            con.connect();


            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
            br.close();
            return sb.toString();


        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (con != null) {
                try {
                    con.disconnect();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return null;
    }

এবং এটি এর মতো ব্যবহার করুন:

String json = getJSON(url);
JSONObject obj;
   try {
         obj = new JSONObject(json);
         JSONArray results_arr = obj.getJSONArray("results");
         final int n = results_arr.length();
            for (int i = 0; i < n; ++i) {
                // get the place id of each object in JSON (Google Search API)
                String place_id = results_arr.getJSONObject(i).getString("place_id");
            }


   }

আপনি সেখানে বসে ক্লাসকাস্টএক্সেপশন ব্যতিক্রম পেয়েছেন। লাইন ইউআরএল ইউ = নতুন ইউআরএল (url) পরিবর্তন করুন; এই ইউআরএলে ইউ = নতুন ইউআরএল (নাল, ইউআরএল, নতুন সান.এন.টিউ.ইউইউইউ.আর.প্রোটোকল। htps. হ্যান্ডলার ()); এই কোডটি কাজ করার জন্য
রোদ আরিয়া

2

এটি দক্ষ কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে এটি সম্ভাব্য উপায়গুলির মধ্যে একটি:

ইউআরএল ব্যবহার থেকে জসন পড়ুন url.openStream()এবং স্ট্রিংয়ে সামগ্রীগুলি পড়ুন।

এই স্ট্রিং দিয়ে একটি JSON অবজেক্ট তৈরি করুন ( json.org এ আরও )

JSONObject(java.lang.String source)
      Construct a JSONObject from a source JSON text string.

0

আমি এখানে একটি আপডেট উত্তর যুক্ত করতে চেয়েছিলাম যেহেতু জেডিকে সাম্প্রতিক আপডেটগুলি (কিছুটা) কোনও এইচটিটিপি ইউআরএলের বিষয়বস্তু পড়ার বিষয়টি আরও সহজ করে দিয়েছে। অন্যরা যেমন বলেছে, পার্সিংয়ের জন্য আপনার এখনও একটি জেএসওএন লাইব্রেরি ব্যবহার করা প্রয়োজন, যেহেতু জেডিকে বর্তমানে একটি নেই। জাভা জন্য সর্বাধিক ব্যবহৃত JSON গ্রন্থাগারগুলির কয়েকটি এখানে রয়েছে:

কোনও ইউআরএল থেকে জেএসনকে পুনরুদ্ধার করার জন্য, জেডিকে ক্লাসিটি (তবে সম্ভবত আপনি বড় প্যালোডের জন্য কিছু করতে চান এমন কিছু নয়) ব্যবহার করে এটি সবচেয়ে সহজ উপায় বলে মনে হচ্ছে, জাভা 9 প্রবর্তিত: https://docs.oracle.com/en/ জাভা / javase / 11 / ডক্স / API / java.base / জাভা / IO / InputStream.html # readAllBytes ()

try(java.io.InputStream is = new java.net.URL("https://graph.facebook.com/me").openStream()) {
    String contents = new String(is.readAllBytes());
}

উদাহরণস্বরূপ, জিএসওএন লাইব্রেরি ব্যবহার করে জেএসএনকে বিশ্লেষণ করতে

com.google.gson.JsonElement element = com.google.gson.JsonParser.parseString(contents); //from 'com.google.code.gson:gson:2.8.6'

0

কীভাবে জসন সামগ্রীকে পার্স করতে হয় তার একটি সম্পূর্ণ নমুনা এখানে। উদাহরণ অ্যান্ড্রয়েড সংস্করণ পরিসংখ্যান গ্রহণ করে (অ্যান্ড্রয়েড স্টুডিও উত্স কোড থেকে পাওয়া এখানে, যা এখানে লিঙ্ক করে)।

ফ্যালব্যাক হিসাবে আপনি সেখান থেকে পাওয়া "ডিস্ট্রিবিউশন.জসন" ফাইলটি রেজ / কাঁচায় অনুলিপি করুন।

build.gradle

    implementation 'com.google.code.gson:gson:2.8.6'

স্পষ্ট

  <uses-permission android:name="android.permission.INTERNET" />

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        if (savedInstanceState != null)
            return
        thread {
            // https://cs.android.com/android/platform/superproject/+/studio-master-dev:tools/adt/idea/android/src/com/android/tools/idea/stats/DistributionService.java
            var root: JsonArray
            Log.d("AppLog", "loading...")
            try {
                HttpURLConnection.setFollowRedirects(true)
                val statsUrl = "https://dl.google.com/android/studio/metadata/distributions.json" //just a string
                val url = URL(statsUrl)
                val request: HttpURLConnection = url.openConnection() as HttpURLConnection
                request.connectTimeout = 3000
                request.connect()
                InputStreamReader(request.content as InputStream).use {
                    root = JsonParser.parseReader(it).asJsonArray
                }
            } catch (e: Exception) {
                Log.d("AppLog", "error while loading from Internet, so using fallback")
                e.printStackTrace()
                InputStreamReader(resources.openRawResource(R.raw.distributions)).use {
                    root = JsonParser.parseReader(it).asJsonArray
                }
            }
            val decimalFormat = DecimalFormat("0.00")
            Log.d("AppLog", "result:")

            root.forEach {
                val androidVersionInfo = it.asJsonObject
                val versionNickName = androidVersionInfo.get("name").asString
                val versionName = androidVersionInfo.get("version").asString
                val versionApiLevel = androidVersionInfo.get("apiLevel").asInt
                val marketSharePercentage = androidVersionInfo.get("distributionPercentage").asFloat * 100f
                Log.d("AppLog", "\"$versionNickName\" - $versionName - API$versionApiLevel - ${decimalFormat.format(marketSharePercentage)}%")
            }
        }
    }
}

নির্ভরতার বিকল্প হিসাবে, আপনি এর পরিবর্তে এটি ব্যবহার করতে পারেন:

InputStreamReader(request.content as InputStream).use {
    val jsonArray = JSONArray(it.readText())
}

এবং ফলব্যাক:

InputStreamReader(resources.openRawResource(R.raw.distributions)).use {
    val jsonArray = JSONArray(it.readText())
}

এটি চালানোর ফলাফল:

loading...
result:
"Ice Cream Sandwich" - 4.0 - API15 - 0.20%
"Jelly Bean" - 4.1 - API16 - 0.60%
"Jelly Bean" - 4.2 - API17 - 0.80%
"Jelly Bean" - 4.3 - API18 - 0.30%
"KitKat" - 4.4 - API19 - 4.00%
"Lollipop" - 5.0 - API21 - 1.80%
"Lollipop" - 5.1 - API22 - 7.40%
"Marshmallow" - 6.0 - API23 - 11.20%
"Nougat" - 7.0 - API24 - 7.50%
"Nougat" - 7.1 - API25 - 5.40%
"Oreo" - 8.0 - API26 - 7.30%
"Oreo" - 8.1 - API27 - 14.00%
"Pie" - 9.0 - API28 - 31.30%
"Android 10" - 10.0 - API29 - 8.20%
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.