如何从android中的url获取json对象

Posted

技术标签:

【中文标题】如何从android中的url获取json对象【英文标题】:how to fetch json object from url in android 【发布时间】: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 【参考方案1】:

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

Parse JSON from HttpURLConnection object

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

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

【讨论】:

您在 jsonparsing 或从 url 获取 jsondata 的实际问题是什么? 有很多不错的网络库可供您使用。喜欢凌空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 对象的

以上是关于如何从android中的url获取json对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 中的 JSON OR URL 获取特定数据? [关闭]

如何从android中的url解析多个JSON对象和数组?我正在使用一个示例,我希望在该示例中使用它,

我如何从android中的php获取JSON

从json android中的对象获取对象

从 Java Android 中的嵌套 JSON 对象获取数据

从 URL 获取 JSON 数组并将其转换为 Android 中的 HashMap