2016-04-10 13 views
13

मुझे एक परियोजना में काम कर रहे ऑटोवैल्यू (और एंड्रॉइड-एपीटी प्लगइन) मिल गया है, और मुझे ऑटोवैल्यू के लिए रयान हार्टर के जीसन एक्सटेंशन के बारे में पता है, लेकिन मैं विस्तार और फैक्ट्री विधि का उपयोग करने के लिए रेट्रोफिट 2 को कैसे लगा सकता हूं अमूर्त वर्ग?रेट्रोफिट 2 के साथ ऑटोवैल्यू का उपयोग कैसे करें?

String grantType = "password"; 
Call<SignIn> signInCall = retrofitApi.signIn(email, password, grantType); 
signInCall.enqueue(callback); 

जैसे यहाँ मैं साइन इन करें JSON मॉडल वस्तु के साथ AutoValue उपयोग करने के लिए अचल स्थिति लागू करने के लिए, लेकिन मैं कैसे अपरिवर्तनीय, AutoValue मॉडल वर्ग के लिए रेट्रोफिट (या शायद अधिक विशेष रूप से Gson) ऊपर हुक करते चाहते हैं? https://github.com/rharter/auto-value-gson

मैं इसे इस तरह काम करने के लिए कर रहा था:

उत्तर

26

[अद्यतन] पुस्तकालय एक सा है, और अधिक यहाँ जाँच बदल दिया है। मुझे आशा है कि यह आपकी मदद करेगा। अपने Gradle एप्लिकेशन फाइल में

  • आयात

    apt 'com.ryanharter.auto.value:auto-value-gson:0.3.1'

  • autovalue के साथ वस्तु बनाएँ:

    @AutoValue public abstract class SignIn {  
        @SerializedName("signin_token") public abstract String signinToken(); 
        @SerializedName("user") public abstract Profile profile(); 
    
        public static TypeAdapter<SignIn> typeAdapter(Gson gson) { 
         return new AutoValue_SignIn.GsonTypeAdapter(gson); 
        } 
    } 
    
  • अपने प्रकार एडाप्टर फैक्टरी बनाएं (संस्करण> 0.3.0 का उपयोग कर यदि जाएं)

    public class AutoValueGsonTypeAdapterFactory implements TypeAdapterFactory { 
    
        public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { 
         Class<? super T> rawType = type.getRawType(); 
    
         if (rawType.equals(SignIn.class)) { 
          return (TypeAdapter<T>) SignIn.typeAdapter(gson); 
         } 
    
         return null; 
        } 
    } 
    
  • अपने GsonBuilder के साथ अपने Gson कनवर्टर बनाएं

    GsonConverterFactory gsonConverterFactory = GsonConverterFactory.create(
         new GsonBuilder() 
           .registerTypeAdapterFactory(new AutoValueGsonTypeAdapterFactory()) 
           .create()); 
    
  • अपने पुराना वापस बिल्डर को यह जोड़े

    Retrofit retrofit = new Retrofit 
         .Builder() 
         .addConverterFactory(gsonConverterFactory) 
         .baseUrl("http://url.com/") 
         .build() 
    
  • आपके अनुरोध करते हैं

  • का आनंद लें

बॉन हम लाइव टेम्पलेट:
अपनी ऑटोवॉल्यू क्लास में, टाइप एडाप्टर कोड उत्पन्न करने के लिए ऑटोटाइपप्टर टाइप करें। काम करने के लिए आपको इसे live template in Android Studio के रूप में जोड़ने की आवश्यकता है।

public static TypeAdapter<$class$> typeAdapter(Gson gson) { 
    return new AutoValue_$class$.GsonTypeAdapter(gson); 
} 

Live template configuration

कैसे बना सकते हैं और लाइव टेम्पलेट का उपयोग करने के लिए।

Live template gif

+0

महान विवरण, इसकी सराहना। मेरे पास अधिकांश भाग काम कर रहा है लेकिन मैं AutoValueGsonTypeAdapterFactory को खोजने में सक्षम नहीं हूं।इस त्रुटि को "त्रुटि: (40, 57) त्रुटि: प्रतीक वर्ग नहीं मिल सकता है AutoValueGsonTypeAdapterFactory" – 3xplore

+0

आपको एक अमूर्त वर्ग पर @GsonTypeAdapterFactory का उपयोग करना है जो TypeAdapterFactory लागू करता है। इसे वहां देखें https://github.com/rharter/auto-value-gson#factory –

2

यहाँ है कि बस आप अपने AutoValue वर्गों में से सभी के लिए कोई टिप्पणी जोड़ने की आवश्यकता है एक Gson TypeAdapterFactory के लिए जेक व्हार्टन द्वारा एक सार https://gist.github.com/JakeWharton/0d67d01badcee0ae7bc9

मेरे लिए बहुत अच्छा काम करता है कि Gson के साथ काम करने की आवश्यकता होती है है।

यहाँ भी कुछ ProGuard मदद है ..

-keep class **.AutoValue_* 
-keepnames @yourpackage.AutoGson class * 
संबंधित मुद्दे