모든 것을 시도했지만 솔루션이 너무 못 생겼습니다. 개선이 가능하다면 (즉, 다른 구현을 사용해야하는 경우) 곧바로 답을 원합니다.GSON을 사용하여지도의 JSON 구문 분석
{"id": 2, "result": {"FirstWorld": {"FirstValue": 5, ... }, "SecondWorld":{"FirstValue": 5, ....}}, "error":null }
는 약 200 "Values"
가 있지만 두 "Worlds"
:
은 방화범에 따라 나에게이 응답을 제공합니다 :
문제는 GSON와지도의지도에있다.
public void RegisterValues(String [] Names, AsyncCallback<Map<String,RegisterValues>> callback);
public class RegisterValues
{
int FirstValue;
int SecondValue;
... And so on 200 times !!!
그래서 내가 지금처럼 데이터에 액세스 :
service_.RegisterValues(Names, new AsyncCallback<ControlService.RegisterValues>()
{
public void onSuccess(GlibControlService.RegisterValues result)
{
String test = "FirstValue";
String message="Result for channel 1 is ";
for(String Name : result.keySet()) message+=Name+"="+result.get(Name);
그러나 당신이 볼 수 있듯이,이 정말 긴 될 것입니다 이것은 내가 내 ControlService
클래스를 구문 분석 지금까지 무엇을 가지고 . 다른 문제는 "Values"중 일부에 앰퍼샌드가 포함되어있어이 메서드에서 사용할 수 없다는 의미입니다.
@SerializedName("One&Two") // Ampersand not allowed in name
int OneTwo; //gives Invalid JSON response apparently
아무에게도 더 나은 방법이 있습니까? 작동
편집 코드 :
private ControlService service_;
service_.connectedNames(new String[0], new AsyncCallback<String[]>() {
public void onSuccess(String[] result)
{
List_.removeItem(0);
Names = result;
for(String Name : result) {
List_.addItem(Name);
}
List_.setEnabled(true);
}
public void onFailure(Throwable why)
{
List_.removeItem(0);
List_.addItem("Server error!");
}
});
그런 다음 내 ControlService 클래스에서, 나는이있다 :이 완벽하게 작동
@RpcImpl(version=RpcImpl.Version.V2_0,transport=RpcImpl.Transport.HTTP_POST)
public interface ControlService extends RemoteJsonService
{
public void connectedNames(String [] Names, AsyncCallback<String[]> callback);
. Map<String, Map<String, Integer>>
이 너무 구조의 onSucess()
부분도 있었다 확인하고, 등등
public void RegisterValues(String [] Names, AsyncCallback<Map< String,Map<String, Integer>> callback);
과 :
나는 나의 ControlService이를 추가하여 그것을 매우 유사한 방식으로 일을했습니다. 그러나 이로 인해 내 프로그램이 중단되었습니다. 중첩 된지도가 마음에 들지 않는 것처럼 보였습니다. 그러나 GSON은 구성원 이름이 JSON 필드와 일치하면 개체에서 자동으로 구문을 분석합니다. 그래서RegisterValues
을 사용하여 자동으로 GSON이이를 구문 분석하도록합니다.
스택 추적 : 나는 GSON 자동 AsyncCallback을 사용하여 중첩 된지도를 구문 분석 할 수 없습니다 생각하는 이유
[ERROR] Errors in 'generated://AF9BA58B045D92E7896CD657C9CC5FAF/example/client/ControlService_JsonProxy.java'
[ERROR] Line 18: INSTANCE cannot be resolved or is not a field
See snapshot: /var/folders/pf/56b3mznn35gg741rlsqq424m0000gp/T/example.client.ControlService_JsonProxy2948240672238331252.java
이다. 아래에서 제안한 내용에 따라 HTTP 호출을하는 것이 더 좋습니다.
그러나이 때문에 프로그램이 중단되었습니다. 스택 추적을 가지고 있습니까? – rpax
완료하지 않아도 별 도움이되지 않습니다. – fiz
@rpax 내가 보낼 수있는 것이 있는지 확실하지 않습니다. – fiz