استخدام مكتبة Volley في Android باستخدام البيانات من الطقس API كمثال

سيتعين على كل مطور Android العمل مع شبكة عاجلاً أم آجلاً. يحتوي Android على العديد من المكتبات مفتوحة المصدر ، مثل Retrofit أو OkHttp أو ، على سبيل المثال ، Volley ، والتي سنتناولها بمزيد من التفصيل اليوم.

إذًا كيف تبدو هذه المكتبة؟

Volley هي مكتبة HTTP تبسط وتسريع التشبيك لتطبيقات Android.
كود مكتبة جيثب .

لذا ، لبدء استخدام Volley ، نحتاج إلى إضافته إلى build.gradle (الوحدة: التطبيق):

dependencies {
    ...
    implementation 'com.android.volley:volley:1.1.1'
}

يجب عليك أيضًا إضافة إذن لاستخدام الإنترنت في بيان تطبيقنا:

<uses-permission android:name="android.permission.INTERNET" />

بعد ذلك نحتاج إلى API. في هذا البرنامج التعليمي ، سأستخدم واجهة برمجة تطبيقات الطقس من openweathermap.org/api .

مثال على واجهة برمجة التطبيقات هذه

بادئ ذي بدء ، سننشئ ترميزًا بسيطًا لعرض البيانات المأخوذة من API (واجهة برمجة التطبيقات).

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tempTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=": "
        android:textSize="20sp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="50dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="50dp"
        />

    <TextView
        android:id="@+id/windTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="50dp"
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:text=" :"
        />

</RelativeLayout>

بعد ذلك ، انتقل إلى MainActivity وقم بإنشاء الحقول اللازمة:

private static final String testUrl = "https://samples.openweathermap.org/data/2.5/weather?id=2172797&appid=b6907d289e10d714a6e88b30761fae22"; //url,      JSON- 
RequestQueue mRequestQueue; //  
TextView tempTextView,windTextView; //     
double temp = 0,windSpeed = 0; //      JSON

نقوم بتهيئة الحقول الميدانية التي تم إنشاؤها في onCreate:

tempTextView = findViewById(R.id.tempTextView);
windTextView = findViewById(R.id.windTextView);

mRequestQueue = Volley.newRequestQueue(this);

ننتقل الآن إلى الموضوع الرئيسي لهذا البرنامج التعليمي - الحصول على البيانات من API باستخدام مكتبة Volley:

1) في MainActivity نقوم بإنشاء طريقة GetWeather:

private void getWeather(String url) {
        final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, //GET - API-   
                url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONObject weather = response.getJSONObject("main"),wind = response.getJSONObject("wind"); // JSON- main  wind (   - ,   -  (JSONArray).
                    temp = weather.getDouble("temp"); 
                    windSpeed = wind.getDouble("speed");
                    //      API
                    setValues(); //   setValues    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() { //    
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mRequestQueue.add(request); //    
}

صورة
تم استخدام jsonformatter لجلب json إلى شكله الطبيعي .
وتجدر الإشارة إلى أنه يجب كتابة أسماء الكائنات بنفس الطريقة تمامًا كما هو الحال في واجهة برمجة التطبيقات لدينا ، وإلا فلن تحصل عليها ببساطة.

2) إنشاء طريقة setValues ​​مباشرة:

private void setValues() {
        tempTextView.setText(": " + temp);
        windTextView.setText(" : " + windSpeed);
}

3) استدعاء أساليب getWeather () و setValues ​​() في onCreate ():

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWeather(testUrl);
        setValues();
}

4) قم بتشغيل التطبيق و ... تم!

صورة

ملاحظة: بعض الروابط المفيدة لأولئك الذين يرغبون في فهم المشكلة بشكل أكثر عمقًا:

التوثيق الرسمي لمكتبة Volley

لفهم أفضل لجوهر

أنواع API لطلبات HTTP

كتابة البيانات بتنسيق JSON

P.SS: ملفات التطبيق على GitHub

All Articles