Android ئېچىشتا مەن ياقتۇرغان ئوچۇق مەنبەلىك ئامبارلار(1)

Views: 457 2 باھا /

ئەپ ئېچىش جەريانىدا پىشقان، ئوچۇق مەنبەلىك ئامبارلارنى تاللاپ ئىشلىتىش ئارقىلىق ئېچىش ئۈنۈمىنى ئاشۇرۇپلا قالماستىن، ئەپنىڭ كېيىنكى ئاسىراش، نەشر كۆتۈرۈش شۇنداقلا ئىجرا سۈپىتىنى ئەلالاشتۇرۇش قاتارلىق خىزمەتلىرىگە كۆپ ئاسانلىق تۇغدۇرالايمىز. بىر ئەپنىڭ پۈتۈپ چىقىشىنى خۇددى ئايروپىلاننىڭ قوراشتۇرۇلۇش جەريانى دەپ ئويلىساق، ئۇنىڭ چاقى، قانىتى، گەۋدىسى، ماتورى... قاتارلىقلار، ئادەتتە شۇ ساھەدە ئالدىنقى قاتاردا تۇرىدىغان زاۋۇت ياكى شىركەتلەردىن ئەكەلدۈرۈلۈپ، مەلۇم ئايروپىلان قوراشتۇرۇش شىركېتى تەرىپىدىن قوراشتۇرۇلۇپ پۈتىدۇ. دېمەك، ئادەتتە نادىر ئەپلەرنىمۇ قالتىس پىروگىرممىرلار، پىشقان ئوچۇق مەنبەلىك كود ئامبارلىرىدىن پايدىلىنىپ، ھەرخىل ئىقتىدارلىرىنى تىز ھەم سۈپەتلىك تاماملاپ پۈتتۈرىدۇ. تۆۋەندە مەن ئاز - تولا ئۇچىرىشىپ باققان، ھىچ بولمىسا ئىسمىنى ئاڭلاپ، قانداق نەرسە ئېكەنلىكىنى چۈشىنىپ باققان بىر قىسىم ئوچۇق مەنبەلىك ئامبارلارنى ئاددىيلا تونۇشتۇرۇپ چىقىمەن.

android_learning_collection

1. Retrofit

ئەگەر ئېچىۋاتقان ئەپ REST API گە مۇناسىۋەتلىك بولسا(يەنى، API ئارقىلىق مۇلازىمىتىر بىلەن ئالاقە قىلىدىغان ئەھۋالدا)، بۇ ئامبار ئەڭ ياخشى تاللاش بولالايدۇ. توردا كىشىلەر: "Retrofit بىزگە REST API نى بىراقلا Java ئېغىزىغا (Java接口) ئايلاندۇرۇپ بەردى" دېيىشىدۇ. بۇ گەپ راست! ئەلۋەتتە باشقا ھەل قىلىش لايىھەلىرىمۇ يوق ئەمەس، لېكىن ھازىرغىچە مەن كۆرگەن يازمىلار ئىچىدە، ھەممە ئادەم Retrofit نى API بىر تەرەپ قىلىش قوراللىرى ئىچىدە ئەڭ ئوماق ۋە قولايلىق دەيدۇ. مېنىڭچە بۇمۇ مۇتلەق راست!
بۇ قورالنى ئىشلىتىشنى ئۈگنىۋالساقلا، ئادەتتە بىز ئۈچۈن مۇرەككەپ تۇيۇلىدىغان - مۇلازىمىتىردىن مەلۇمات ئوقۇش مەشغۇلاتىنى كېچىك بالا ئۆردەك سىزغاندەك ئاسانلاشتۇرىۋالالايمىز. مىسالەن:

public interface RetrofitInterface {

// 异步带回调
// bimas qedem qaytarmaliq
@GET("/api/user")
User getUser(@Query("user_id") int userId, Callback callback);

// 同步
//mas qedem
@POST("/api/user/register")
User registerUser(@Body User user);
}


// 例子
//misal
RetrofitInterface retrofitInterface = new RestAdapter.Builder()
.setEndpoint(API.API_URL).build().create(RetrofitInterface.class);

// 获取 id 为 2020 的用户
// id si 2020 bolghan ishletkuchi uchurliqini elish
retrofitInterface.getUser(2048, new Callback() {
@Override
public void success(User user, Response response) {
//get User data here
}

@Override
public void failure(RetrofitError retrofitError) {

}
});

يەنى بارلىق API ئېلتىماسلىرىنى بىر ئېغىز(interface) ئىچىگە جەملەپ، Rest API نىڭ تەمىنلىگەن ئۇسسۇلى بويىچە ئېغىزنى ئۇنىڭغا ئۆتكۈزۈپ مىساللاپ (实例化)، تور ئېلتىماس ئۇسسۇللىرىنى زۆرۈر بولغان جايدا ئىشلىتىپ(قايتا ئەمەلگە ئاشۇرۇپ)، Callback ھالىتىدە بىر تەرەپ قىلساقلا بولىدۇ.
Retrofit سۈكۈتتەGson ئارقىلىق Json ئوقۇيدۇ، شۇڭا مەخسۇس Json بىر تەرەپ قىلىشنىڭ ھاجىتى يوق.

ھازىر Retrofit 2.0 نۇسخسى قىزغىن مۇكەممەللەشتۈرۈلۈش باسقۇچىدا تۇرىۋاتىدۇ. 1.9 نەشرىدىن باشلاپ نۇرغۇن يېڭى ئىقتىدارلار قوشۇلغاننىڭ ئۈستىگە، ئىلگىرىكى بىر قىسىم تازا ياخشى بولماي قالغان ئىقتىدارلىرى چىقىرىۋىتىلگەن، شۇڭا ئىشلەتكەندە ئىھتىياجغا ئاساسەن مۇۋاپىق نەشرىنى تاللاش تەۋسىيە.

2. DBFlow

ئېچىۋاتقان ئەپتە نۇرغۇن مۇرەككەپ قۇرۇلمىلىق، تۇراقسىز سانلىق مەلۇماتلارنى ساقلاش ئىھتىياجى بولسا، ئادەتتە sql يېزىپ بىر تەرەپ قىلىش ئاۋارىچىلىق بولۇپلا قالماي، بەلكى بەزىدە ئەسلا مۇمكىن ئەمەس. بۇ خىل ئەھۋالدا مەن DBFlowنى ئىشلىتىشنى تەۋسىيە قىلىمەن. خۇددى ئورگان تەرەپ GitHub بېتىدە يازغاندەك:"بۇ بىر سۈرئېتى ئالامەت، ئىقتىدارى كارامەت، ئىشلىتىش قولاي بولغان Android مەخسۇس ORM ئامبىرى - سىز ئۈچۈنلا تەييارلانغان ساندان مەشغۇلاتى كودى." ئاددى بىر مىسال بىلەن كېلەيلى:

// Query a List
// bir jediwelni List halette oqup leish
new Select().from(SomeTable.class).queryList();
new Select().from(SomeTable.class).where(conditions).queryList();

// Query Single Model
// bir jediwelni Model halette oqup elish
new Select().from(SomeTable.class).querySingle();
new Select().from(SomeTable.class).where(conditions).querySingle();

// Query a Table List and Cursor List
// Jediwel List we Cursor List ni izdesh
new Select().from(SomeTable.class).where(conditions).queryTableList();
new Select().from(SomeTable.class).where(conditions).queryCursorList();

// SELECT methods
// izdesh ussulliri
new Select().distinct().from(table).queryList();
new Select().all().from(table).queryList();
new Select().avg(SomeTable$Table.SALARY).from(SomeTable.class).queryList();
new Select().method(SomeTable$Table.SALARY, "MAX").from(SomeTable.class).queryList();

يەنى، ساندان بىر تەرەپ قىلىش ئۇسۇللىرى يۇقىرىقىدەك ئاددىي ۋە جانلىق. بىز پەقەت ساقلىماقچى بولغان مەلۇمات قۇرۇلمىسىغا ماس بولغان مودىل قۇرىۋىلىپ، شۇ ئارقىلىق ناھايىتى ئاسانلا مەلۇمات قىستۇرۇش، ئىزدەش، تاسقاش مەشغۇلاتلىرىنى قىلالايمىز.(يۇقىرىدا پەقەت قولايلىقلىغا مىسال ئېلىندى. تەپسىلىي ئىشلىتىش ئۇسۇللىرىنى ئورگان تەرەپ ئىشلىتىش قوللانمىسىدىن كۆرۈش كېرەك.)
ئەلۋەتتە Android نىڭ بۇ خىلدىكى ORM ئامبارلىرى نۇرغۇن، ئەمما باشقىلارنىڭ ئىجرا ئۈنۈمىنى سىلىشتۇرىشى، ۋە ئۆزۈمنىڭ دەسلەپكى ئىشلىتىش تۇيغۇمغا ئاساسەن، DBFlow نىڭ ھەقىقەتەنمۇ قالتىس ئىكەنلىكىگە ئىشىنىپ، بۇ يەردە تەۋسىيە قىلدىم.

3. Glide

Glide بولسا توردىن رەسىم يۈكلەشتە ئىشلىتىدىغان ئامبار. ئەلۋەتتە بۇ خىلدىكى ئامبارلاردىن ناھايىتى كۆپ، نۆۋەتتە كۆپ ئىشلىتىلىدىغانلىرىدىن يەنە Universal Image Loader ۋە Picasso ۋە Volley قاتارلىقلار بار. باشقىلىرىنىمۇ ئاز - تولا ئىشلىتىپ باققان بولساممۇ، يەنىلا Glide نى ئەڭ ئەپلىك رەسىم يۈكلەش ئامبېرى دىيەلەيمەن. تۆۋەندىكى مىسالدا، Glide نى ئىشلىتىپ، URL دىكى رەسىمنى ImageView غا يۈكلەيمىز:

ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("logo.png").into(imageView);

4. Butterknife

Android نىڭ UI كونتروللرىنى ۋە خاسلىقلىرىنى Java قىسمىغا باغلايدىغان(مەسىلەن: بىر view نىڭ OnClick ھادىسىسىنى مەلۇم ئۇسۇلغا باغلايدىغان.) ئامبار. مىسال دەپ قويايلى:

class ExampleActivity extends Activity {
@Bind(R.id.title) TextView title;
@Bind(R.id.subtitle) TextView subtitle;
@Bind(R.id.footer) TextView footer;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}

ئىشلىتىش جەريانىدا ھېس قىلغانلىرىم بويىچە ئۇ خىلدىكى ئوچۇق مەنبەلىك ئامبارلارنى داۋاملىق رەتلەپ، ئورتاقلىشىپ باقىمەن. لېكىن نۇرغۇن ئامبارلار ئادەتتە خىلى كۆپ ئىقتىدارلارنى ھازىرلىغان. دېمەك، ئەمەلىي ئىشلىتىش ئۈچۈن ئىچكىرىلەپ ئۆگىنىشكە توغرا كېلىدۇ، ھەمدە بۇ يازمىدا تەپسىلىي ئىشلىتىش ھەققىدە توختىلىلمايدۇ.

2 باھا »

  1. ھەۋەسكار
    ھەۋەسكار March 5th, 2016 at 09:44 pm
    جاۋاب

    گەرچە مەن بۇ ساھەدە بولمىساممۇ سىزنىڭ مۇشۇ ساھەدىكىلەرلەرگە قولايلىق يارىتىش مەقسىتىدە بۇ يازمىنى يازغانلىقىڭىزغا ئۆز تەشەككۈرۈمنى بىلدۈرىمەن،

  2. غەلىبە
    غەلىبە March 19th, 2016 at 11:31 am
    جاۋاب

    بۇ مەنبەلەرنى مەنمۇ ياقتۇرۇپ قالدىم، دېمىسىمۇ مۇشۇنداق ئوچۇق مەنبەلىك تۈرلەر بىزنىڭ ئەپ ئېچىش ئىشلىرىمىزغا نۇرغۇنلىغان قولايلىقلارنى ئېلىپ كېلىدۇ، بولسا مۇشۇنداق مەنبەلەرنى پات پات تەۋسىيە قىلىپ تۇرسىلا، رەھمەت