2012-03-08 10 views
1

私はネットワークがダウンしていても動作するアプリケーションを作成しようとしています。 考え方は、RequestFactoryから返されたデータをlocalStorageに格納し、ネットワークが利用できないときはlocalStorageを使用することです。 私の問題 - サーバーエラー(5XX、4XX、...)とネットワークエラーを区別する方法を正確にはわかりません。 RequestFactoryとオフラインのクライアント

すべてのヘルプ、

おかげで、 ギラッドをいただければ幸いです。(私は両方のケースで私のReceiver.onFailure()が呼び出されますが、私はまだこのような状況を識別するために方法がわからないと仮定)

答えて

1

応答コードないインターネット接続がない要求があるため、ネットワークの失敗したレスポンスコードがアクセスされなければならないことを識別するためにRequestFactoryで0

あります。 RequestTransportは最適な場所のようです。

ここには、OfflineAwareRequestTransportの概略実装があります。

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)); 
     } 
     } 

    }; 
    } 
関連する問題