我正在使用改造高效的网络库,但无法处理包含单个前缀的Dynamic JSON,该前缀
responseMessage
会object
随机responseMessage
更改,在某些情况下(动态),相同的前缀()会更改为String。
Json格式的responseMessage对象:
{
"applicationType":"1",
"responseMessage":{
"surname":"Jhon",
"forename":" taylor",
"dob":"17081990",
"refNo":"3394909238490F",
"result":"Received"
}
}
responseMessage
Json格式会动态更改为字符串类型:
{
"applicationType":"4",
"responseMessage":"Success"
}
我的问题是,由于改造具有内置的JSON
解析,我必须为每个请求分配单个POJO!但是不幸的是,REST-API是基于动态JSON
响应构建的。前缀将在
成功(…) 和 失败(…) 方法中从字符串随机更改为对象!
void doTrackRef(Map<String, String> paramsref2) {
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://192.168.100.44/RestDemo").build();
TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
userref.login(paramsref2,
new Callback<TrackerRefResponse>() {
@Override
public void success(
TrackerRefResponse trackdetailresponse,
Response response) {
Toast.makeText(TrackerActivity.this, "Success",
Toast.LENGTH_SHORT).show();
}
@Override
public void failure(RetrofitError retrofitError) {
Toast.makeText(TrackerActivity.this, "No internet",
Toast.LENGTH_SHORT).show();
}
});
}
Pojo:
public class TrackerRefResponse {
private String applicationType;
private String responseMessage; //String type
//private ResponseMessage responseMessage; //Object of type ResponseMessage
//Setters and Getters
}
在上面的代码中,POJO
TrackerRefResponse.java前缀responseMessage被设置为string或类型为responseMessage的对象,因此我们可以使用具有相同名称的ref变量创建POJO(java
basics
:)),所以我正在为JSON
Retrofit中的动态寻找相同的解决方案。我知道这在具有异步任务的普通http客户端中是非常容易的工作,但这不是REST-
Api JSON
解析中的最佳实践!始终以性能为基准
Volley或Retrofit是最佳选择,但我无法动态处理JSON
!
我知道可能的解决方案
在http客户端解析中使用旧的asyc任务。:(
尝试说服RESTapi后端开发人员。
创建自定义的改造客户端:)
晚会晚了,但是您可以使用转换器。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://graph.facebook.com")
.setConverter(new DynamicJsonConverter()) // set your static class as converter here
.build();
api = restAdapter.create(FacebookApi.class);
然后,您使用一个静态类来实现改装的Converter:
static class DynamicJsonConverter implements Converter {
@Override public Object fromBody(TypedInput typedInput, Type type) throws ConversionException {
try {
InputStream in = typedInput.in(); // convert the typedInput to String
String string = fromStream(in);
in.close(); // we are responsible to close the InputStream after use
if (String.class.equals(type)) {
return string;
} else {
return new Gson().fromJson(string, type); // convert to the supplied type, typically Object, JsonObject or Map<String, Object>
}
} catch (Exception e) { // a lot may happen here, whatever happens
throw new ConversionException(e); // wrap it into ConversionException so retrofit can process it
}
}
@Override public TypedOutput toBody(Object object) { // not required
return null;
}
private static String fromStream(InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
out.append("\r\n");
}
return out.toString();
}
}
我已经编写了此样本转换器,因此它以字符串,对象,JsonObject或Map
<字符串,对象>的形式返回Json响应。显然,并非所有返回类型都适用于每个Json,并且肯定有改进的空间。但是它演示了如何使用Converter将几乎所有响应转换为动态Json。
POJO: 在上面的代码POJO TrackerRefResponse.java前缀responseMessage被设置为responseMessage类型的string或object,所以我们可以用同名的ref变量(java basics:)创建POJO,所以我正在为Referfit中的dynamic寻找相同的解决方案。我知道这在带有异步任务的普通http客户端中非常容易,但这不是REST-AP
我尝试设置一个完整的路径,如: 但在这里,reverfit没有看到路径实际上是完整的URL,并且正在尝试下载 有任何提示,我可以如何使用这样的动态url改造?
我想动态地从EditText中获取值...当用户按下添加按钮时,我生成了很多EditText...当用户按下添加按钮时,它每次都会生成3个Edittext。我不知道如何从这个动态生成的EdiTtext中获取值。现在我的问题是如何从每行的3个Edittext中获取值。我还需要验证用户是否删除了视图。请帮助我是新的android开发。当用户按下保存按钮时,应该会发生这种情况。提前谢谢! 这是课堂。 这
问题内容: 我正在尝试创建一个非常简单的Swing UI,以在后台进行处理时通过JTextArea将信息记录到屏幕上。当用户单击按钮时,我希望每个呼叫都能够: 立即显示在用户界面中 目前,在单击按钮后处理完成之前,JTextArea不会显示所有日志信息。如何获得动态刷新? 问题答案: 我的应用程序遇到了同样的问题。我的应用程序有一个“运行”按钮,它执行一些操作并将结果输出到JTextArea。我不
问题内容: 我的问题 当我处理时,基本上我的节和行都有一个数组。 我使用,,,这样的方法 当我的数组是动态的时,使用数字,等会变得令人头疼。动态是指某些节或行可以具有不同的位置,或者根本不存在。 例如,我删除A节,而我的数组是 我喜欢这样 将另一部分C添加为0元素 然后在函数中使用 它看起来很简单,但是当我有很多节并且要在数组中隐藏或移动它的情况很多时,将很难控制和添加新类型的节。有时候,我创建阵
问题内容: 我知道使用准备好的语句有助于避免sql- injection。我的问题是,准备好的语句通常是非常静态的。我有一个问题,我在哪里在运行时根据用户输入建立sql查询的子句。根据填充的输入字段,我必须将相应的语句添加到where子句中。如何通过准备好的语句实现这一目标? 问题答案: 我猜您可以根据要查询的列来动态构建准备好的语句,即使用StringBuffer和循环根据所需的列来构建它们。