මෙම ප්රශ්නයට දැනටමත් හොඳ පිළිතුරු රාශියක් ඇත, නමුත් එම පිළිතුරු පළ කිරීමෙන් පසු විශාල පුස්තකාල රාශියක් එළියට පැමිණ තිබේ. මෙය නවක-මාර්ගෝපදේශකයක් ලෙස අදහස් කෙරේ.
මම ජාලය මෙහෙයුම් සහ සිදු කිරීම සඳහා භාවිතා වූ අවස්ථා කිහිපයක් ආවරණය වනු ඇත එය එක් එක් සඳහා විසඳුමක් හෝ දෙකක්.
HTTP හරහා නැවත යොමු කරන්න
සාමාන්යයෙන් Json, XML හෝ වෙනත් දෙයක් විය හැකිය
සම්පූර්ණ API ප්රවේශය
කොටස් මිල ගණන්, පොලී අනුපාත සහ වක්ර විනිමය අනුපාත නිරීක්ෂණය කිරීමට පරිශීලකයින්ට ඉඩ දෙන යෙදුමක් ඔබ ලියන බව කියමු. ඔබට මේ වගේ පෙනුමක් ඇති Json API එකක් හමු වේ:
http://api.example.com/stocks //ResponseWrapper<String> object containing a list of Srings with ticker symbols
http://api.example.com/stocks/$symbol //Stock object
http://api.example.com/stocks/$symbol/prices //PriceHistory<Stock> object
http://api.example.com/currencies //ResponseWrapper<String> object containing a list of currency abbreviation
http://api.example.com/currencies/$currency //Currency object
http://api.example.com/currencies/$id1/values/$id2 //PriceHistory<Currency> object comparing the prices of the first currency (id1) to the second (id2)
චතුරස්රයේ සිට නැවත සකස් කිරීම
බහුවිධ අන්ත ලක්ෂ්ය සහිත API සඳහා මෙය කදිම තේරීමක් වන අතර අයන හෝ වොලී වැනි වෙනත් පුස්තකාල මෙන් තනි තනිව කේත කිරීම වෙනුවට REST අන්ත ලක්ෂ්ය ප්රකාශ කිරීමට ඔබට ඉඩ සලසයි. (වෙබ් අඩවිය: http://square.github.io/retrofit/ )
මූල්ය API සමඟ ඔබ එය භාවිතා කරන්නේ කෙසේද?
build.gradle
ඔබේ මොඩියුල මට්ටමට මෙම රේඛා එක් කරන්න buid.gradle:
implementation 'com.squareup.retrofit2:retrofit:2.3.0' //retrofit library, current as of September 21, 2017
implementation 'com.squareup.retrofit2:converter-gson:2.3.0' //gson serialization and deserialization support for retrofit, version must match retrofit version
FinanceApi.java
public interface FinancesApi {
@GET("stocks")
Call<ResponseWrapper<String>> listStocks();
@GET("stocks/{symbol}")
Call<Stock> getStock(@Path("symbol")String tickerSymbol);
@GET("stocks/{symbol}/prices")
Call<PriceHistory<Stock>> getPriceHistory(@Path("symbol")String tickerSymbol);
@GET("currencies")
Call<ResponseWrapper<String>> listCurrencies();
@GET("currencies/{symbol}")
Call<Currency> getCurrency(@Path("symbol")String currencySymbol);
@GET("currencies/{symbol}/values/{compare_symbol}")
Call<PriceHistory<Currency>> getComparativeHistory(@Path("symbol")String currency, @Path("compare_symbol")String currencyToPriceAgainst);
}
ෆිනෑන්ස්අපිබිල්ඩර්
public class FinancesApiBuilder {
public static FinancesApi build(String baseUrl){
return new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(FinancesApi.class);
}
}
ෆිනෑන්ස් ෆ්රැග්මන්ට් ස්නිපෙට්
FinancesApi api = FinancesApiBuilder.build("http://api.example.com/"); //trailing '/' required for predictable behavior
api.getStock("INTC").enqueue(new Callback<Stock>(){
@Override
public void onResponse(Call<Stock> stockCall, Response<Stock> stockResponse){
Stock stock = stockCall.body();
//do something with the stock
}
@Override
public void onResponse(Call<Stock> stockCall, Throwable t){
//something bad happened
}
}
ඔබගේ API වෙත API යතුරක් හෝ පරිශීලක ටෝකනයක් වැනි වෙනත් ශීර්ෂයක් යැවීමට අවශ්ය නම්, රෙට්රොෆිට් මෙය පහසු කරයි (විස්තර සඳහා මෙම පුදුමාකාර පිළිතුර බලන්න: https://stackoverflow.com/a/42899766/1024412 ).
එක් ඕෆ් රීස්ට් ඒපීඅයි ප්රවේශය
පරිශීලකයින්ගේ ජීපීඑස් ස්ථානය සොයා බලා එම ප්රදේශයේ වර්තමාන උෂ්ණත්වය පරීක්ෂා කර ඔවුන්ට මනෝභාවය පවසන “මනෝ කාලගුණ” යෙදුමක් ඔබ ගොඩනඟමු යැයි කියමු. මෙම වර්ගයේ යෙදුමට API අන්ත ලක්ෂ්ය ප්රකාශ කිරීමට අවශ්ය නොවේ; එයට අවශ්ය වන්නේ එක් API අන්ත ලක්ෂ්යයකට ප්රවේශ විය හැකි වීමයි.
අයන
මෙම වර්ගයේ ප්රවේශය සඳහා මෙය විශිෂ්ට පුස්තකාලයකි.
කරුණාකර msysmilu ගේ විශිෂ්ට පිළිතුර කියවන්න ( https://stackoverflow.com/a/28559884/1024412 )
HTTP හරහා පින්තූර පූරණය කරන්න
වොලි
ReST API සඳහා වොලී ද භාවිතා කළ හැකිය, නමුත් අවශ්ය වඩාත් සංකීර්ණ සැකසුම නිසා මම ඉහත පරිදි චතුරස්රයේ සිට Retrofit භාවිතා කිරීමට කැමැත්තෙමි ( http://square.github.io/retrofit/ )
ඔබ සමාජ ජාල යෙදුමක් සාදන බවත්, මිතුරන්ගේ පැතිකඩ පින්තූර පූරණය කිරීමට අවශ්ය බවත් කියමු.
build.gradle
ඔබේ මොඩියුල මට්ටමට මෙම රේඛාව එක් කරන්න buid.gradle:
implementation 'com.android.volley:volley:1.0.0'
ImageFetch.java
වොලිට Retrofit වලට වඩා වැඩි සැකසුමක් අවශ්ය වේ. RequestQueue, ImageLoader සහ ImageCache සැකසීමට ඔබට මේ වගේ පන්තියක් නිර්මාණය කිරීමට අවශ්ය වනු ඇත, නමුත් එය එතරම් නරක නැත:
public class ImageFetch {
private static ImageLoader imageLoader = null;
private static RequestQueue imageQueue = null;
public static ImageLoader getImageLoader(Context ctx){
if(imageLoader == null){
if(imageQueue == null){
imageQueue = Volley.newRequestQueue(ctx.getApplicationContext());
}
imageLoader = new ImageLoader(imageQueue, new ImageLoader.ImageCache() {
Map<String, Bitmap> cache = new HashMap<String, Bitmap>();
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
return imageLoader;
}
}
user_view_dialog.xml
පින්තූරයක් එක් කිරීම සඳහා පහත දැක්වෙන දෑ ඔබේ පිරිසැලසුම් xml ගොනුවට එක් කරන්න:
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/profile_picture"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
app:srcCompat="@android:drawable/spinner_background"/>
UserViewDialog.java
OnCreate ක්රමයට (කොටස්, ක්රියාකාරකම්) හෝ ඉදිකිරීම්කරු (ඩයලොග්) වෙත පහත කේතය එක් කරන්න:
NetworkImageView profilePicture = view.findViewById(R.id.profile_picture);
profilePicture.setImageUrl("http://example.com/users/images/profile.jpg", ImageFetch.getImageLoader(getContext());
පිකාසෝ
චතුරස්රයේ තවත් විශිෂ්ට පුස්තකාලයක්. හොඳ උදාහරණ කිහිපයක් සඳහා කරුණාකර වෙබ් අඩවිය බලන්න: http://square.github.io/picasso/