Android开发中,经常需要用到网络请求和数据解析。其中,JSON格式是应用比较广泛的一种数据交换格式。在Android中,我们可以使用JSONObject和JSONArray等类来进行JSON格式的解析。但是,为了方便代码维护和减少重复代码的编写,我们可以将JSON解析部分进行封装,通过配置参数即可完成不同JSON数据的解析。
下面,我们就来详细了解一下如何将JSON解析进行封装。
首先,我们需要一个解析器类来封装我们的JSON解析,我们将其命名为JsonParser。如下所示:
public class JsonParser { private static final String TAG = "JsonParser"; private static JsonParser mInstance; private Gson gson; private JsonParser() { gson = new Gson(); } public static synchronized JsonParser getInstance() { if (mInstance == null) { mInstance = new JsonParser(); } return mInstance; } /** * 解析json为指定对象 */ publicT parseJson(String jsonString,Class clazz) { try { return gson.fromJson(jsonString,clazz); } catch (Exception e) { Log.e(TAG,e.getMessage(),e); return null; } } /** * 解析json为List集合 */ public List parseJsonToList(String jsonString,Class clazz) { try { Type type = new Typetoken >() {}.getType(); return gson.fromJson(jsonString,type); } catch (Exception e) { Log.e(TAG,e); return null; } } }
上述代码中,我们使用了Gson来进行JSON解析,同时将解析器的实例设置为单例模式,方便代码调用。
为了方便使用,我们还可以对以上代码进行一些封装,例如定义一个泛型方法,这样可以适用于不同类型的JSON解析数据。如下所示:
public staticvoid parseJson(String jsonString,Class clazz,HttpListener listener) { T data = JsonParser.getInstance().parseJson(jsonString,clazz); if (listener != null) { if (data != null) { listener.onSuccess(data); } else { listener.onFail("解析数据为空"); } } }
上述代码中,我们定义了一个parseJson方法,通过传入不同的Class类型和HttpListener,可以适应不同类型的JSON解析数据。HttpListener可以在代码中进行定义,例如:
public interface HttpListener{ void onSuccess(T data); void onFail(String msg); }
通过以上的JSON解析封装,我们可以在代码中进行简化调用,例如:
JsonParser.parseJson(response,Result.class,new HttpListener() { @Override public void onSuccess(Result data) { if (data != null) { // Todo 处理数据 } } @Override public void onFail(String msg) { Toast.makeText(mContext,msg,Toast.LENGTH_SHORT).show(); } });