效果图:

获取并解析Json


package com.example.admin.quakereport;

import android.text.TextUtils;import android.util.Log;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;

public class QueryUtils {

    private static final String LOG_TAG = QueryUtils.class.getSimpleName();

    public static List<Earthquake> fetchEarthquakeData(String requestUrl){        URL url = createUrl(requestUrl);        String jsonResponse = null;        try        { jsonResponse = makehttpRequest(url);        }catch (IOException e){            Log.e(LOG_TAG,"Error in making http request",e); }        List<Earthquake> result = extractEarthquakes(jsonResponse);        return result;    }

    private static URL createUrl(String mUrl) {        URL url = null;        try {            url = new URL(mUrl);        } catch (MalformedURLException e) {            Log.e(LOG_TAG, "Problem building the URL ", e);        }        return url;    }

    private static String makehttpRequest(URL url)throws IOException {        String jsonResponse = "";        if (url == null) {            return jsonResponse;        }

        HttpURLConnection urlConnection = null;        InputStream inputStream = null;

        try {            urlConnection = (HttpURLConnection) url.openConnection();            urlConnection.setReadTimeout(10000);            urlConnection.setConnectTimeout(15000);            urlConnection.setRequestMethod("GET");            urlConnection.connect();

            if (urlConnection.getResponseCode() == 200) {                inputStream = urlConnection.getInputStream();                jsonResponse = readFromStream(inputStream);            } else {                Log.e(LOG_TAG, "Error in connection!! Bad Response ");            }

        } catch (IOException e) {            Log.e(LOG_TAG, "Problem retrieving the earthquake JSON results.", e);        } finally {            {                if (urlConnection != null) {                    urlConnection.disconnect();                }                if (inputStream != null) {                    inputStream.close();                }            }        }        return jsonResponse;    }

    private static String readFromStream(InputStream inputStream)throws IOException{        StringBuilder output = new StringBuilder();        if (inputStream != null) {            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));            BufferedReader reader = new BufferedReader(inputStreamReader);            String line = reader.readLine();

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

       return output.toString();}

    private static List<Earthquake> extractEarthquakes(String earthquakeJSON){         final String getJsonArray="features",jsObject="properties",double_magnituede="mag",String_location="place"                 ,String_time="time",String_url="url";

        if (TextUtils.isEmpty(earthquakeJSON)) {            return null;        }        List<Earthquake> earthquakes = new ArrayList<>();

        try {            JSONObject baseJsonResponse = new JSONObject(earthquakeJSON);            JSONArray featureArray = baseJsonResponse.getJSONArray(getJsonArray);

            for (int i = 0; i < featureArray.length(); i++) {                JSONObject currentEarthquake = featureArray.getJSONObject(i);                JSONObject properties = currentEarthquake.getJSONObject(jsObject);                double magnitude = properties.getDouble(double_magnituede);                String location = properties.getString(String_location);                long time = properties.getLong(String_time);                String Url = properties.getString(String_url);                Earthquake earthquake = new Earthquake(magnitude, location, time,Url);                earthquakes.add(earthquake);            }

        }catch (JSONException e){            Log.e(LOG_TAG,"Error in fetching data",e);        }        return earthquakes;    }

}
android 网络连接必须放在子线程中,不推荐用AsyncTask的原因:横屏时AsyncTask不会被回收到内存。
package com.example.admin.quakereport;

import android.content.AsyncTaskLoader;import android.content.Context;import android.support.annotation.NonNull;import android.support.annotation.Nullable;

import java.util.List;

public class EarthquakeLoader extends AsyncTaskLoader<List<Earthquake>> {    private String mUrl;    private List<Earthquake> itemlist;

    public EarthquakeLoader(@NonNull Context context,String mUrl) {        super(context);        this.mUrl=mUrl;    }

    @Override    protected void onStartLoading() {        if (itemlist!=null){            deliverResult(itemlist);        }else {            forceLoad();        }    }

    @Nullable    @Override

    public List<Earthquake> loadInBackground(){        if (mUrl == null) {            return null; }        List<Earthquake> earthquakes = QueryUtils.fetchEarthquakeData(mUrl);        return earthquakes;    }

    @Override    public void deliverResult(@Nullable List<Earthquake> data) {        itemlist=data;        super.deliverResult(data);    }}
github项目源码: https://github.com/NeoWu55/Android-QuakeReport

在线解析JSON+ AsyncTaskLoader的更多相关文章

  1. QT使用QJson生成解析Json数据的方法

    QT中使用json还是比较方便的,下面用例子直接说明 举例子之前首先推荐一个在线解析json格式的网站,具体格式用法如下图所示: 之后根据这个格式进行json数据解析. QT使用json需要包含的头文 ...

  2. JSON在线解析,新版本JSON在线解析

    SOJSON,出了新版本的JSON在线解析,真的很好用,可以上下版本.左右版本.效果图如下.它的网址是:http://www.sojson.com/simple_json.html SOJSON集成了 ...

  3. 在线聊天项目1.4版 使用Gson方法解析Json字符串以便重构request和response的各种请求和响应 解决聊天不畅问题 Gson包下载地址

    在线聊天项目结构图: 多用户登陆效果图: 多用户聊天效果图: 数据库效果图: 重新构建了Server类,使用了Gson方法,通过解析Json字符串,增加Info类,简化判断过程. Server类代码如 ...

  4. JSON在线解析及格式化校验工具 jsonin.com

    JSON在线解析及格式化校验工具 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.它是基 ...

  5. php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)

    $str2='{"code":200,"datas":{"id":1,"coupon_id":"123&quo ...

  6. WP8解析JSON格式(使用Newtonsoft.Json包)

    DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式. 这里举一个简单的解析JSON格式的例子(更多JSON操作): { "response&q ...

  7. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  8. ios 中使用SBJson拼接和解析json

    1.ios解析json 使用开源json包,项目地址:      http://stig.github.com/json-framework/ NSData * responseData = [res ...

  9. 使用JSONObject生成和解析json

    1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组,以"[]"括起来 Object 对象,类似于C中的结构体 ...

随机推荐

  1. [MySQL] mysql 的行级显式锁定和悲观锁

    隐式和显式锁定:1.innodb是两阶段锁定协议,隐式锁定比如在事务的执行过程中.会进行锁定,锁只有在commit或rollback的时候,才会同时被释放2.特定的语句进行显式锁定 select .. ...

  2. Java开发笔记(四十五)成员属性与成员方法

    前面介绍了许多数据类型,除了基本类型如整型int.双精度型double.布尔型boolean之外,还有高级一些的如包装整型Integer.字符串类型String.本地日期类型LocalDate等等,那 ...

  3. webstorm快捷键大全(亲自整理)

    Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*…*/ ) Shift+F6 重构-重命名 Ctrl+X 删除行 Ctrl+D 复制行 Ctrl+G 查找行 Ctrl+Shift+Up ...

  4. es6 常用方法

    来自 https://www.cnblogs.com/lhl66/p/9555903.html 侵删 来自 https://www.cnblogs.com/lhl66/p/8862106.html 侵 ...

  5. idea打jar包并部署java web项目

    1.idea打jar包 (idea提供界面是jar包方式) 点击package,结束就OK,jar包一般放在target里面 部署项目 1.停止之前的服务: 查到到java的所有进程:ps -ef|g ...

  6. 四边形不等式优化DP

    记录一下,以免忘了 对于一个形如 \[dp[i][j]=min(dp[i][k]+dp[k][j]+w[i][j])\] 的转移方程(注意取最大值时不一定满足四边形不等式) 定理1 若对于\(a \l ...

  7. Valgrind.Callgrind使用

    Callgrind介绍 用来对统计程序的函数调用之间的关系, 并统计每个函数的耗时 Callgrind之所以能够发现函数调用的关系, 依赖于平台的明确返回和调用指令. 在x86和amd64平台上wor ...

  8. python将两个数组合并成一个数组的两种方法的代码

    内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...

  9. win10的react native 开发环境搭建,使用Android模拟器

    1.打开cmd的管理员模式,win+X,选择命令提示符(管理员)即可,运行如下命令: @"%SystemRoot%\System32\WindowsPowerShell\v1.0\power ...

  10. 手持式停车收费管理系统全套案例,支持车牌识别,包含了android版app,微信小程序查询,响应式管理后台,云端大数据存储

    先展示几个app效果图片吧,使用起来非常方便,关联了机器的快捷键操作,操作速度提高了不少,摄像头车牌自动识别,车牌识别无网络情况下离线也可以使用   再来一张后台截图,停车场信息完整显示,今日数据实时 ...