您好我正在Android
使用retrofit
API从服务器获取响应的应用程序.Retrofit自动解析json响应并创建POJO
类的对象.我将json存储到sqlite中,如果没有连接互联网,请从sqllite调用json,面临困难必须手动解析json.
有没有什么方法我使用改造库解析json并从json字符串或文件路径生成pojo?我的代码在这里从url获取:
@FormUrlEncoded @POST("getResponse") ObservablegetResponse(@Field("token") String token);
如果没有连接互联网,我想要这样的东西.
@FromStringEncoded ObservablegetResponseOffline(@Field("token") String token);
谢谢.
简单地使用Google's GSON
图书馆,让你转换json
到POJO
,反之亦然.取json
从sqlite
使用解析它gson
.
Gson gson=new Gson(); UserResponse userResponse= gson.fromJson(jsonInStringFromDb,UserResponse.class);
您也可以JSON
使用来解析文件Gson
.
JSON到Java对象,从文件中读取它.
Gson gson = new Gson(); Staff staff = gson.fromJson(new FileReader("D:\\file.json"), Staff.class);
你没有提到建议.当真正的服务器还没有工作时,我在开发的早期阶段使用以下解决方案在应用程序中模拟服务器.
所以你可以在OkHttp中使用拦截器.像这样:
OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addInterceptor(new MockClient(context));
和MockClient看起来像这样:
public class MockClient implements Interceptor { Context context; public MockClient(Context context) { this.context = context; } @Override public Response intercept(Chain chain) throws IOException { HttpUrl url = chain.request().url(); //here determine what to do base on url. //e.g.: switch(url.encodedPath()) { case "some/path" : String response = readJsonFieleFromAssestOrAnyOtherStorage(); return new Response.Builder() .code(200) .message(response) .request(chain.request()) .protocol(Protocol.HTTP_1_1) .body(ResponseBody.create(MediaType.parse("application/json"), response.getBytes())) .addHeader("content-type", "application/json") .build(); } } }