Gwt RequestFactory和脱机客户端
我正在尝试创建一个即使在网络关闭时也能工作的应用程序。 其思想是将从RequestFactory返回的数据存储在localStorage上,并在网络不可用时使用localStorage。 我的问题-我不确定如何区分服务器错误(5XX、4XX等)和网络错误。 (我假设在这两种情况下都会调用Receiver.onFailure(),但我仍然不知道如何识别这种情况) 任何帮助都将不胜感激 谢谢,Gwt RequestFactory和脱机客户端,gwt,requestfactory,Gwt,Requestfactory,我正在尝试创建一个即使在网络关闭时也能工作的应用程序。 其思想是将从RequestFactory返回的数据存储在localStorage上,并在网络不可用时使用localStorage。 我的问题-我不确定如何区分服务器错误(5XX、4XX等)和网络错误。 (我假设在这两种情况下都会调用Receiver.onFailure(),但我仍然不知道如何识别这种情况) 任何帮助都将不胜感激 谢谢, 吉拉德。没有互联网连接时,响应代码为0 使用RequestFactory来识别由于网络原因请求未成功,必须
吉拉德。没有互联网连接时,响应代码为0 使用RequestFactory来识别由于网络原因请求未成功,必须访问响应代码。请求传输似乎是最好的地方 下面是OfflineWareRequestTransport的大致实现
public class OfflineAwareRequestTransport extends DefaultRequestTransport {
private final EventBus eventBus;
private boolean online = true;
public OfflineAwareRequestTransport(EventBus eventBus) {
this.eventBus = eventBus;
}
@Override
public void send(final String payload, final TransportReceiver receiver) {
// super.send(payload, proxy);
RequestBuilder builder = createRequestBuilder();
configureRequestBuilder(builder);
builder.setRequestData(payload);
builder.setCallback(createRequestCallback(receiver, payload));
try {
builder.send();
} catch (RequestException e) {
}
}
protected static final int SC_OFFLINE = 0;
protected RequestCallback createRequestCallback(final TransportReceiver receiver,
final String payload) {
return new RequestCallback() {
public void onError(Request request, Throwable exception) {
receiver.onTransportFailure(new ServerFailure(exception.getMessage()));
}
public void onResponseReceived(Request request, Response response) {
if (Response.SC_OK == response.getStatusCode()) {
String text = response.getText();
setOnline(true);
receiver.onTransportSuccess(text);
} else if (response.getStatusCode() == SC_OFFLINE) {
setOnline(false);
boolean processedOk = processPayload(payload);
receiver.onTransportFailure(new ServerFailure("You are offline!", OfflineReceiver.name,
"", !processedOk));
} else {
setOnline(true);
String message = "Server Error " + response.getStatusCode() + " " + response.getText();
receiver.onTransportFailure(new ServerFailure(message));
}
}
};
}
没有internet连接时的响应代码为0 使用RequestFactory来识别由于网络原因请求未成功,必须访问响应代码。请求传输似乎是最好的地方 下面是OfflineWareRequestTransport的大致实现
public class OfflineAwareRequestTransport extends DefaultRequestTransport {
private final EventBus eventBus;
private boolean online = true;
public OfflineAwareRequestTransport(EventBus eventBus) {
this.eventBus = eventBus;
}
@Override
public void send(final String payload, final TransportReceiver receiver) {
// super.send(payload, proxy);
RequestBuilder builder = createRequestBuilder();
configureRequestBuilder(builder);
builder.setRequestData(payload);
builder.setCallback(createRequestCallback(receiver, payload));
try {
builder.send();
} catch (RequestException e) {
}
}
protected static final int SC_OFFLINE = 0;
protected RequestCallback createRequestCallback(final TransportReceiver receiver,
final String payload) {
return new RequestCallback() {
public void onError(Request request, Throwable exception) {
receiver.onTransportFailure(new ServerFailure(exception.getMessage()));
}
public void onResponseReceived(Request request, Response response) {
if (Response.SC_OK == response.getStatusCode()) {
String text = response.getText();
setOnline(true);
receiver.onTransportSuccess(text);
} else if (response.getStatusCode() == SC_OFFLINE) {
setOnline(false);
boolean processedOk = processPayload(payload);
receiver.onTransportFailure(new ServerFailure("You are offline!", OfflineReceiver.name,
"", !processedOk));
} else {
setOnline(true);
String message = "Server Error " + response.getStatusCode() + " " + response.getText();
receiver.onTransportFailure(new ServerFailure(message));
}
}
};
}