سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش پارس json با کتاب خانه Retrofit با زبان کوتلین در اندروید می پردازیم آموزش های مختلفی از parse (پارس) json را برای شما قرار دادیم امروز به آموزش پارس json با کتاب خانه Retrofit به زبان کوتلین می پردازیم و سپس داده پارس شده در listView قرار می گیرد در ادامه می توانید پیش نمایشی از آن را مشاهده کنید.
در این آموزش بعد از اینکه json پارس شد در listview قرار می گیرد با کلیک بروی هر آیتم یک دیتای خاص به اکتیویتی دیگر پاس داده خواهد شد.
برای اینکه از این آموزش استفاده کنید لازم است تا کوتلین را به اندروید استودیو اضافه کنید برای اینکار می توانید از آموزش زیر استفاده کنید.
آموزش اضافه کردن kotlin به اندروید استودیو
وارد فایل Build.gradle از نوع Module شده سپس در بخش Dependencies خط زیر را اضافه کنید.
build.gradle
1 | compile 'com.squareup.retrofit:retrofit:1.9.0' |
بعد از اینکار وارد فایل AndroidManifest.xml شده دسترسی اینترنت را همانند زیر در آن قرار دهید.
build.gradle
1 | <uses-permission android:name="android.permission.INTERNET" /> |
Book.kt
1 2 3 4 5 6 7 8 9 10 | package ir.programchi /** * Created by Jefferson on 6/7/2017. */ class Book { var bookId: Int = 0 var name: String? = null var price: String? = null var inStock: Int = 0 } |
یک مثال ساده بزنم تا بهتر متوجه شوید.
اگر از کد زیر استفاده کنید.
1 2 | var a: String = "abc" a = null |
اگر از کد زیر استفاده کنید.
1 2 | var b: String? = "abc" b = null |
یک کلاس دیگر به نام BooksAPI.kt ایجاد کرده و کدهای زیر را در آن قرار دهید.
BooksAPI.kt
1 2 3 4 5 6 7 8 9 10 | package com.example.admin.retrofit2 import retrofit.Callback import retrofit.http.GET /** * Created by Jefferson on 6/7/2017. */ interface BooksAPI { @GET("/api/retro.php") fun getBooks(response: Callback<List<Book>>) } |
فایل json ما در هاست , در آدرس زیر قرار دارد .
1 | https://programchi.ir/api/retro.php |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ListView android:id="@+id/listViewBooks" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </RelativeLayout> |
یک فایل به نام simple_list.xml ایجاد کرده و کدهای زیر را در آن قرار دهید.
simple_list.xml
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textStyle="bold" android:fontFamily="cursive" android:textSize="20sp" > </TextView> |
حالا باید کد های مربوط به MainActivity.kt را آن قرار دهید.
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package com.example.admin.retrofit2 import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.app.ProgressDialog import android.content.Intent import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.ListView import retrofit.Callback import retrofit.RestAdapter import retrofit.RetrofitError import retrofit.client.Response class MainActivity : AppCompatActivity(){ private var listView: ListView? = null private var books: List<Book>? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) listView = findViewById(R.id.listViewBooks) as ListView getBooks() listView!!.setOnItemClickListener { adapterView, view, i, l -> val intent = Intent(this, ShowBookDetails::class.java) val book = books!![i] intent.putExtra(KEY_BOOK_ID, book.bookId) intent.putExtra(KEY_BOOK_NAME, book.name) intent.putExtra(KEY_BOOK_PRICE, book.price) intent.putExtra(KEY_BOOK_STOCK, book.inStock) startActivity(intent)} } private fun getBooks() { val loading = ProgressDialog.show(this, "Fetching Data", "Please wait...", false, false) val adapter = RestAdapter.Builder() .setEndpoint(ROOT_URL) .build() val api = adapter.create<BooksAPI>(BooksAPI::class.java!!) api.getBooks(object : Callback<List<Book>> { override fun success(list: List<Book>, response: Response) { loading.dismiss() books = list showList() } override fun failure(error: RetrofitError) { } }) } private fun showList() { val items = arrayOfNulls<String>(books!!.size) for (i in books!!.indices) { items[i] = books!![i].name } val adapter = ArrayAdapter<String>(this, R.layout.simple_list, items) listView!!.adapter = adapter } companion object { val ROOT_URL = "https://programchi.ir/api" val KEY_BOOK_ID = "key_book_id" val KEY_BOOK_NAME = "key_book_name" val KEY_BOOK_PRICE = "key_book_price" val KEY_BOOK_STOCK = "key_book_stock" } } |
حالا یک layout به نام activity_show_book_detail.xml ایجاد کرده و کدهای زیر را در آن قرار دهید.
activity_show_book_detail.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_show_book_details" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textViewBookName" android:textSize="24dp" android:paddingTop="10dp" android:textStyle="bold" android:textAlignment="center" android:fontFamily="cursive" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:textStyle="bold" android:fontFamily="cursive" android:id="@+id/textViewBookPrice" android:textAlignment="center" android:paddingTop="10dp" android:textSize="24dp" android:layout_below="@id/textViewBookName" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:textStyle="bold" android:fontFamily="cursive" android:id="@+id/textViewBookInStock" android:textSize="24dp" android:paddingTop="10dp" android:textAlignment="center" android:layout_below="@id/textViewBookPrice" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> |
یک اکتیویتی به نام ShowBookDetail.kt ایجاد کرده و کدهای زیر را در آن قرار دهید.
ShowBookDetail.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package ir.programchi import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.TextView class ShowBookDetails : AppCompatActivity() { private var textViewBookName: TextView? = null private var textViewBookPrice: TextView? = null private var textViewBookInStock: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_show_book_details) textViewBookName = findViewById(R.id.textViewBookName) as TextView textViewBookPrice = findViewById(R.id.textViewBookPrice) as TextView textViewBookInStock = findViewById(R.id.textViewBookInStock) as TextView val intent = intent textViewBookName!!.text = "Title: " + intent.getStringExtra(MainActivity.KEY_BOOK_NAME) textViewBookPrice!!.text = "Price: " + intent.getStringExtra(MainActivity.KEY_BOOK_PRICE) textViewBookInStock!!.text = "In Stock: " + intent.getIntExtra(MainActivity.KEY_BOOK_STOCK, 0).toString() } } |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام دوستان
کسی میدونه چطور میشه به یه آبجکت json عنوان داد ؟
مثل آرایه که میشه عنوان داد .مثلا می نویسیم
()response[“arrayTitle”]=array$