ベビーベッドまたはアンドロイド開発者のために持っている必要があります

この記事は、日常生活をさらに簡素化するための新しいツールやライブラリを探している開発者向けに作成されました。

それでは始めましょう。

バターナイフ


ライブラリはSquareによって開発され、すぐに開発者に定着しました。 ButterKnifeは、すでに肥大化したactivityを減らすために、 findViewByIdを置き換えるために作成されました。

 View someView = (View) findViewById(R.id.someView) 

行の長さを見てください! これがクラスフィールドである場合、これらは2行全体です。

 View someView; //  ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); someView = (View) findViewById(R.id.someView); //  } 

それでは、ButterKnifeに移りましょう。 ButterKnifeを使用した簡単なコード例を次に示します。

  @BindView(R.id.someView1) View view1; @BindView(R.id.someView2) View view2; @BindView(R.id.someView3) View view3; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //  } 

すべてが非常に簡単です。 @BindViewアノテーションを使用して、必要なビューを指定します。そして、主なことはButterKnife.bind(this);を忘れないことButterKnife.bind(this); (ホルダーまたはフラグメントなどの他の場所では、アクティビティでこれを行う必要があります 。これは少し異なります。 こちらを参照してください

プロジェクトに追加する方法は?

Gradle(アプリモジュール):

  compile 'com.jakewharton:butterknife:8.5.1' apt 'com.jakewharton:butterknife-compiler:8.5.1'  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'  jack 

レトロフィット2


SquareはButterKnifeだけでなく、多くの開発者が自分の人生を想像することのできない他の多くの美しいライブラリも作成しました。 そのようなライブラリの1つがRetrofit 2です。

REST APIでの作業を簡素化するために作成されました。 以前は、リクエストを行うために大量のコードを変更する必要がありましたが、現在はすべてが異なります。 それでは、リクエストを行う方法は?

gradleに追加(アプリモジュール):

  compile 'com.google.code.gson:gson:2.7' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' //  rxJava    compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' 

まず、次のようにjsonからpojoに変換するサイトを取得し、AndroidStudioで生成されたすべてのクラスをコピーします。

画像

次に、インターフェースを作成します(RxJavaとともにレトロフィットを使用します)。

 public interface IWeatherProvider{ @GET("/premium/v1/weather.ashx") Observable<Model> getWeather(@QueryMap Map<String, String> map); } 

QueryMapは、クエリパラメーター(APIキーなど)をスローします。 @QueryMapの代わりにQueryを使用できますが、パラメーターごとに独自のクエリを作成する必要があります。

その後:

 Retrofit retrofit = Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(Constants.WEATHER_BASE_URL) .build(); ... retrofit.create(IWeatherProvider); 

次に、パラメーターにデータを入力する必要があります。

 HashMap<String, String> mapJson = new HashMap<>(); mapJson.put("key", Constants.WEATHER_API_KEY); mapJson.put("q", latitude + "," + longitude); mapJson.put("num_of_days", "14"); mapJson.put("date", "today"); mapJson.put("format", "json"); 

iweatherProvider.getWeather(mapJson);呼び出しiweatherProvider.getWeather(mapJson);

そして最後に:

 new CompositeDisposable().add(weatherProvider .observeOn(Schedulers.newThread()) .subscribeOn(Schedulers.io()) .subscribe(onNext, onError)); 

RxJavaを使用していない場合は、ObservableインターフェイスをCallに置き換えて実行します

 iweatherProvider.getWeather(mapJson).enqueue(callback); 

ダガー2


Googleによって作成されました。 依存性注入パターンの実装を支援します。 Daggerを使用すると、プロジェクトをクールに構造化できます。これは、コードの可読性に非常によく影響し、テストに役立ちます(ちなみに、daggerでのレトロフィットの使用は喜びです)。 ポイントは、すべてのクラスが既製のデータを処理したいということです。彼らはそれを取得し、それを使って何かをするだけです。 しかし、誰かがデータを提供する必要があります。 この役割は短剣によって引き受けられます。 Daggerの基本はコンポーネントです。ここにそのうちの1つがあります。

 @Component(modules = {WeatherInfoTaskModule.class}) public interface RetrofitComponent { void inject(MainActivity activity); } 

すべてのコンポーネントはモジュールで構成されます。1つのコンポーネントに複数のモジュールが存在する場合があります。モジュールの例を次に示します。

 @Module public class WeatherInfoTaskModule { @Provides Gson provideGson() { Log.d(TAG, "gson"); return new GsonBuilder().create(); } @Provides IWeatherProvider provideWeather(Retrofit retrofit) { Log.d(TAG, "weather"); return retrofit.create(IWeatherProvider.class); } @Provides Retrofit provideRetrofit(Gson gson) { Log.d(TAG, "retrofit"); return new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(Constants.WEATHER_BASE_URL) .build(); } } 

モジュール内には、提供アノテーションが付いた関数があり、アノテーションから次のように、データを提供します。 基本的に、これらの機能は、その意味(地理位置情報など)に従ってモジュールに分割されます。 そして、ここで論理的な質問が発生します、それを使用する方法

とても簡単です。 アクティビティで、データを受信するフィールドを@Inject IWeatherProvider mWeatherProvider;アノテーション( @Inject IWeatherProvider mWeatherProvider; )でマークします。 次に、 Applicationクラスを作成します。

 public class App extends Application { private static RetrofitComponent component; @Override public void onCreate() { super.onCreate(); component = DaggerRetrofitComponent.create(); } public RetrofitComponent getComponent() { return component; } } 

OnCreateのMainActivityで、次を実行します。

 @Inject IWeatherProvider mWeatherProvider; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((App) getApplicationContext()).getComponent().inject(this); } 

PSマニフェストにAppクラスを追加することを忘れないでください。

gradle(アプリ):

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'android-apt' dependencies{ compile 'com.google.dagger:dagger:2.7' apt 'com.google.dagger:dagger-compiler:2.7' } 

gradle(プロジェクトモジュール):

  classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 

しかし、入力関数の1つにもデータが必要な場合はどうでしょうか? この場合、短剣は必要なクラスまたはデータ型を返す関数を探してコンポーネントを実行し、見つかったときに呼び出します。

関数の名前を変更するとどうなりますか? ダガーは名前をまったく気にせず、署名にのみ関心があるため、これは作品に影響しません。

スタジオはクラスDaggerRetrofitComponentを赤で強調表示します。 どうする Daggerはコード生成で機能するため、この場合は再構築するだけです。

マルチデックス


遅かれ早かれ、開発者は65,000のメソッドの問題に直面します。 しかし、もう一度始めましょう。 携帯電話にアプリケーションをインストールする場合は、apkファイルが必要です。 apkファイルの基盤はdexファイルです。 Dexファイル-これらは1つのファイルに収集されたJavaクラスです。 ただし、dexファイルには65,000のメソッドの制限があります。 また、ほとんどのアプリケーションはこの制限を超えており、ビルド時に例外が発生します。 そのような場合、multidexを作成しました。 gradle(アプリモジュール)に追加:

 ... defaultConfig { ... multiDexEnabled true ... } ... compile 'com.android.support:multidex:1.0.1' 


int00hのおかげで、以前は間違っていた情報を修正します。
MultiDexを接続するには3つの方法があります。



投稿は長く出ましたが、ホットが何らかの形で説明したことを願っています。 どのライブラリを使用していますか?

Source: https://habr.com/ru/post/J336956/


All Articles