【问题标题】:how to fetch json object from url in android如何从android中的url获取json对象
【发布时间】:2016-11-16 23:40:01
【问题描述】:

我想从 json 对象中获取 json 数据。 我的 json 数据是:{"avg":2.5} 而我的 android 代码是

public class AsyncTaskParseJson extends AsyncTask < String, String, String > {

        final String TAG = "AsyncTaskParseJson.java";

        // set your json string url here
        String yourJsonStringUrl = "http://www.bsservicess.com/photoUpload/star_avg.php?bookName=" + book_name;

        // contacts JSONArray

        @Override
        protected void onPreExecute() {}

        @Override
        protected String doInBackground(String...arg0) {

            try {
                JSONParser jParser = new JSONParser();

                // get json string from url
                JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

                // get the array of users
                JSONObject dataJsonArr = json.getJSONObject(str);

                String c = dataJsonArr.getString("avg");
                na = c;
                starts = Float.parseFloat(c);


            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String strFromDoInBg) {
            super.onPostExecute(strFromDoInBg);

            netRate.setRating(starts);
            Toast.makeText(mybookview.this, Float.toString(starts), Toast.LENGTH_SHORT).show();
        }

但不知何故它不起作用。我已经尝试了每个教程和所有东西,但没有任何效果。请帮助我

【问题讨论】:

  • 您能解释一下哪个部分不起作用吗?您是否尝试进入调试模式并查看每一步会发生什么?打开链接你可以在你的后端看到一个警告警告:Division by zero in /home/mohanmanali9/public_html/photoUpload/star_avg.php on line 30
  • 其实我不知道如何从json对象中获取数据,我只是想知道从json对象中获取数据的方法
  • 首先你需要一个模型类来映射你的json,那么你遵循的过程几乎是正确的。 here你可以找到一个很好的解释。
  • 使用 Volley 库非常简单
  • 1) Get your string from the server 2) Parse the JSON 假设您实际上是从 URL 获取 JSON

标签: android json


【解决方案1】:

这是从 url 示例中简单获取数据:

Parse JSON from HttpURLConnection object

如果你想使用库,那么试试 Volley: 教程链接:

http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

【讨论】:

【解决方案2】:

您获得的 json 数据作为响应是 {"avg":2.5} 简单删除下面的代码

 JSONObject dataJsonArr = json.getJSONObject(str);

 String c = dataJsonArr.getString("avg");

下面一行

String c = json.getString("avg");

【讨论】:

  • srry 但它给了我一个错误:原因:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String org.json.JSONObject.getString(java.lang.String) ' 在空对象引用上
【解决方案3】:

一个非常简单的解决方案

String str = "{ \"avg\" :0 }";
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(str);
String value = object.get("avg").getAsString();

但首先您必须更正后端中的警告。

编辑完整的解决方案

public class AsyncTaskParseJson extends AsyncTask < String, String, String > {

    HttpURLConnection urlConnection;

    @Override
    protected String doInBackground(String...args) {

        StringBuilder result = new StringBuilder();

        try {
            URL url = new URL("http://www.bsservicess.com/photoUpload/star_avg.php?bookName=" + book_name);
            urlConnection = (HttpURLConnection) url.openConnection();
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());

            BufferedReader reader = new BufferedReader(new InputStreamReader( in ));

            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            urlConnection.disconnect();
        }

        return result.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        JsonParser parser = new JsonParser();
        JsonObject object = (JsonObject) parser.parse(result);
        String value = object.get("avg").getAsString();
    }

}

但首先从网络响应中删除警告!

【讨论】:

  • 这不是从网络请求中获取 json
  • @cricket_007 Nicky的问题不是从web请求中获取数据,因为asynctask的逻辑是正确的,问题在于解析数据。所以这个解决方案非常适合他的需求。
  • 看不到jParser.getJSONFromUrl(yourJsonStringUrl);的响应或实现怎么知道逻辑正确?
  • asynctask逻辑正确,解析阶段错误。你怎么会知道这事?因为我尝试使用相同的代码自己打开 url,并在发布解决方案之前修复了它。我决定只发布 json 部分,因为其余部分可以正常工作。当然,为了简单起见,Nicky 必须更改我硬编码的“str”。
  • 但是这样我没有使用 url 所以我是怎么得到 json 对象的
猜你喜欢
  • 2023-02-26
  • 2013-03-15
  • 2016-10-01
  • 2022-01-24
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多