میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

Stackoverflow در اندروید

استفاده از Retrofit برای کوئری گرفتن و پرس و جو از Stackoverflow در اندروید
StackOverflow یک سایت پر بازدید است که برنامه نویس ها مشکلات برنامه نویسی خود را در آن مطرح می کنند. این سایت یک REST API ارائه می کند که به خوبی مستندسازی شده و با توضیحات لازم در اختیار توسعه دهندگان قرار می گیرد. Query ها را می توان با استفاده از این APIساخت. می توانید جهت مشاهده ی مستندات این API و استفاده از قابلیت های آن به آدرس

https://api.stackexchange.com/docs/search
مراجعه نمایید. در تمرین زیر با کتابخانه ی
Retrofit REST و بر اساس تگ هایی که مشخص می شود، می توانید از سوال های پاسخ داده یا تایید نهایی نشده کوئری بگیرید.
در مثال جاری URL کوئری زیر را بکار می بریم. تگ ها از طریق کد ما مشخص می شوند.
https://api.stackexchange.com/2.2/search?order=desc&sort=activity&tagged=android&site=stackoverflow

 


ساخت پروژه و تنظیمات اولیه

یک اپلیکیشن اندروید به نام com.vogella.android.retrofitstackoverflow ایجاد نمایید. این اپلیکیشن بایستی اسم com.vogella.android.retrofitstackoverflow را به عنوان  top level package مورد استفاده قرار دهد.
کتابخانه ی زیر را به فایل build.gradle اضافه نمایید.

 

compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

مجوز لازم برای دسترسی به اینترنت را در فایل تنظیمات ( manifest ) اپلیکیشن تنظیم نمایید.

 


تعریف API و کلاس Retrofit adapter

در پاسخ JSON ای که از StackOverflow دریافت می شود، تنها به title و link نیاز داریم. کلاس های زیر را ایجاد نمایید.

 

package android.vogella.com.retrofitstackoverflow;
// This is used to map the JSON keys to the object by GSON
public class Question {
String title;
String link;
@Override
public String toString() {
return(title);
}
}
package android.vogella.com.retrofitstackoverflow;
import java.util.List;
public class StackOverflowQuestions {
List<Question> items;
}

با پیاده سازی interface زیر REST API را برای Retrofit تعریف نمایید.
توجه: از آنجایی stackoverflow پاسخ را در یک آبجکت جاسازی می کند، لازم است ساختار داده ای مورد نیاز را از نوع list تعریف نمایید.

 

package com.vogella.android.retrofitstackoverflow;
import retrofit.Callback;
import retrofit.http.GET;
import retrofit.http.Query;
import retrofit.Call;
public interface StackOverflowAPI {
@GET("/2.2/questions?order=desc&sort=creation&site=stackoverflow")
Call<StackOverflowQuestions> loadQuestions(@Query("tagged") String tags);
}

یک منوی XML مشابه زیر با نام main_menu.xml ایجاد نمایید.

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_load"
android:title="Load" />
</menu>

کد کلاس activity خود را طوری ویرایش نمایید که به شما امکان کوئری گرفتن از سوال هایی را بدهد که با رشته ی “android” علامت یا تگ گذاری شده اند.

 

package com.vogella.android.retrofitstackoverflow;
import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import retrofit.Call;
import retrofit.Callback;
import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;
public class MainActivity extends ListActivity implements Callback<StackOverflowQuestions> {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
requestWindowFeature(Window.FEATURE_PROGRESS);
ArrayAdapter<Question> arrayAdapter =
new ArrayAdapter<Question>(this,
android.R.layout.simple_list_item_1,
android.R.id.text1,
new ArrayList<Question>());
setListAdapter(arrayAdapter);
setProgressBarIndeterminateVisibility(true);
setProgressBarVisibility(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
setProgressBarIndeterminateVisibility(true);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.stackexchange.com")
 
.addConverterFactory(GsonConverterFactory.create())
.build();
// prepare call in Retrofit ۲٫۰
StackOverflowAPI stackOverflowAPI = retrofit.create(StackOverflowAPI.class);
Call<StackOverflowQuestions> call = stackOverflowAPI.loadQuestions("android");
//asynchronous call
call.enqueue(this);
// synchronous call would be with execute, in this case you
// would have to perform this outside the main thread
// call.execute()
// to cancel a running request
// call.cancel();
// calls can only be used once but you can easily clone them
//Call<StackOverflowQuestions> c = call.clone();
//c.enqueue(this);
return true;
}
@Override
public void onResponse(Response<StackOverflowQuestions> response, Retrofit retrofit) {
setProgressBarIndeterminateVisibility(false);
ArrayAdapter<Question> adapter = (ArrayAdapter<Question>) getListAdapter();
adapter.clear();
adapter.addAll(response.body().items);
}
@Override
public void onFailure(Throwable t) {
Toast.makeText(MainActivity.this, t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
}

 


امیدواریم آموزش Stackoverflow در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟