2016-08-25 9 views
7

तो मैं पहले से ही जब लॉगिन समस्याओं के बिना किया जाता है Json से एक टोकन प्राप्त करते हैं, और हैशरेट्रोफिट 2 + Rxjava से निपटने त्रुटि

प्राप्त लेकिन जब सर्वर से प्रतिक्रिया त्रुटि है, तो मैं Json नहीं मिल सकता है संदेश ({संदेश: "त्रुटि: गलत ईमेल}" क्योंकि onError में हम केवल एक फेंकने योग्य और नहीं एक मॉडल वर्ग तर्क के रूप में मिलता है मैं कैसे सर्वर onError ??

से एक json संदेश प्राप्त कर सकते हैं

पर में चाहते

final Observable<TokenResponse> observable = Service.login(userCredentials); 
    observable.subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<TokenResponse>() { 
       String error=""; 

       @Override 
       public void onCompleted() { 
        mLoginView.whenLoginSucess(); 
       } 

       @Override 
       public void onError(Throwable e) { 

        if (e instanceof HttpException) { 
         HttpException exception = (HttpException) e; 
         Response response = exception.response(); 
         Converter<ResponseBody, ErrorFromServer> converter = new GsonConverterFactory() 
           .responseBodyConverter(ErrorFromServer.class, Annotation[0]); 
         ErrorFromServer error = converter.convert(response.errorBody()); 
        } 

        mLoginView.errorText(error); 

        e.printStackTrace(); 

       } 

       @Override 
       public void onNext(TokenResponse tokenResponse) { 


        SharedPreferences.Editor editor = sharedP.edit(); 
        editor.putString("hash", tokenResponse.getToken()); 
        editor.commit(); 

        //getString return key value "hash" if there is no value, returns null 
        hash = sharedP.getString("hash",null); 




       } 
      }); 

टोकन रेस्पॉन्स कोड

public class TokenResponse { 
@SerializedName("hash") 
@Expose 
private String token; 

@SerializedName("message") 
@Expose 
private String message; 


public String getMessage() {return message;} 


public String getToken() { 
    return token; 
} 

}

+0

'प्रतिक्रिया.कोई() 'की जांच करें? –

+0

मेरा नया उत्तर देखें –

उत्तर

7

मैं एक समाधान नहीं मिला, मैं एक आवेदन वर्ग है कि एक रेट्रोफिट बनाता है और फिर मैं सिर्फ एक ResponseBody बनाया है और responseBodyConverter (,) का उपयोग कर परिवर्तित

   @Override 
       public void onError(Throwable e) { 
        if (e instanceof HttpException) { 
         ResponseBody body = ((HttpException) e).response().errorBody(); 

         Converter<ResponseBody, Error> errorConverter = 
          application.getRetrofit().responseBodyConverter(Error.class, new Annotation[0]); 
        // Convert the error body into our Error type. 
         try { 
          Error error = errorConverter.convert(body); 
          Log.i("","ERROR: " + error.message); 
          mLoginView.errorText(error.message); 
         } catch (IOException e1) { 
         e1.printStackTrace(); 
         } 
        } 



       static class Error{ 
       String message; 
       } 

प्राप्त जेएसओएन {"त्रुटि": 4041, "संदेश": "ईमेल नहीं मिला"} था, क्योंकि क्लास त्रुटि, मैंने अभी एक चर संदेश भेजा है क्योंकि मुझे बस उपयोगकर्ता को संदेश

पर संदेश दिखाना होगा
1

आप एक आवेदन त्रुटि के साथ एक तार्किक त्रुटि (प्रवेश किसी कारण से विफल) मिश्रण कर रहे हैं। यदि आपका सर्वर असफल लॉगिन के मामले में HTTP 200 और वैध जेसन के साथ प्रतिक्रिया भेजता है, तो आपका एप्लिकेशन बिल्कुल भी कॉल नहीं करेगा।

तो मूल रूप से आपको सर्वर से (सफल) प्रतिक्रिया की जांच करने और लॉगिन सफल होने पर उपलब्ध कराए गए जेसन के आधार पर निर्णय लेने की आवश्यकता है।

ऑनरर को कॉल किया जाना चाहिए, उदाहरण के लिए, यदि सर्वर पहुंच योग्य नहीं है या वैध प्रतिक्रिया देने में विफल रहता है।

संपादित करें: मुझे नहीं पता कि आपकेमें क्या है लेकिन मूल रूप से लॉगिन के लिए प्रतिक्रिया समान होनी चाहिए, भले ही यह सफल हो या नहीं। यदि आप परिणाम में त्रुटियां हैं या नहीं, तो आप बस टोकन रेस्पॉन्स की जांच करें।

चेक एक उदाहरण के रूप में इस सवाल का जवाब: https://stackoverflow.com/a/31159671/180538

+0

ऑनरर थ्रोबल। फेंक (नया उपयोगकर्ता प्रमाणीकरण अपवाद (टोकन.getइरर()); –

+0

यह समझ में आता है, लेकिन मैंने पहले से ही कुछ ऐसा करने की कोशिश की है .. मैं इस कोड को जानने की कोशिश कर रहा हूं, आप मुझे भेजते हैं लेकिन मैं इस नए उपयोगकर्ता में अटक गया हूं प्रमाणीकरण अपवाद –

+0

अधिक जानकारी –

संबंधित मुद्दे