آموزش تجزیه json از پوشه assets در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش تجزیه (پارس) json از پوشه assets در اندروید می پردازیم قبلا json را به طور کامل توضیح دادیم که json چیست و به چی کار می آید در ادامه لینک مطالب قبلی را نیز قرار میدهیم تا به آنها دسترسی داشته باشید در ادامه با ما همراه باشید.
json چیست ؟
آموزش ایجاد فولدر assets در برنامه نویسی اندروید
بعد از اینکه پوشه assets را ایجاد کردید یک فایل به نام json.json ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [ { "date":"11/8/2014", "auther":"Mohammad Hossein Jfp", "description":"json object parsing using gson library is easy", "post_name":"json object parsing" }, { "date":"12/8/2014", "auther":"Mohammad Hossein Jfp", "description":"json array parsing using gson library", "post_name":"json array parsing" }, { "date":"17/8/2014", "auther":"Mohammad Hossein Jfp", "description":"store json file in assets folder and get data when required", "post_name":"json parsing from assets folder" } ] |
در بالا هر ] به معنی آرایه از json و هر } به معنی یک آبجکت از json است که به (Json Array) و (Json Object) معروف هستند.
بعد از اینکه فایل بالا در assets قرار دادید باید یک کتاب خانه به نام gson را به پروژه اضافه کنید.
برای اینکار وارد فایل Build.gradle از نوع Module شده سپس در بخش dependencies خط زیر را اضافه کنید.
1 | compile 'com.google.code.gson:gson:2.3' |
پروژه را sync کنید.
بعد از اینکار وارد activity_main.xml شده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MyActivity"> <TextView android:id="@+id/txtPostList" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> |
در بالا یک TextView برای قرارگرفتن json قرار گرفته شده است.
باید یک کلاس getter و setter ایجاد کنید نام این کلاس برابر با BeanPost.java است بعد از ایجاد این کلاس کدهای زیر را در آن قرار دهید.
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 | package nkdroid.com.jsonfromassets; import com.google.gson.annotations.SerializedName; /** * Created by Jefferson on 11/8/2014. */ public class BeanPost { @SerializedName("post_name") private String post_name; @SerializedName("auther") private String auther; @SerializedName("date") private String date; @SerializedName("description") private String description; public BeanPost(String post_name, String auther, String date, String description) { this.post_name = post_name; this.auther = auther; this.date = date; this.description = description; } public String getPost_name() { return post_name; } public void setPost_name(String post_name) { this.post_name = post_name; } public String getAuther() { return auther; } public void setAuther(String auther) { this.auther = auther; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } |
کلاس بالا عمل get گرفتن و ser قرار دادن هر آیتم json را انجام میدهد.
بعد از اینکار وارد فایل MainActivity.java شده و کدهای زیر را در آن قرار دهید.
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 63 64 65 66 67 68 69 70 71 | package ir.programchi; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.lang.reflect.Type; import java.util.ArrayList; import nkdroid.com.jsonfromassets.BeanPost; public class MainActivity extends Activity { private ProgressDialog progressDialog; private TextView txtPostList; private ArrayList<BeanPost> beanPostArrayList; private StringBuffer postList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtPostList=(TextView)findViewById(R.id.txtPostList); new AsyncTask<Void,Void,Void>(){ @Override protected void onPreExecute() { super.onPreExecute(); progressDialog=new ProgressDialog(MyActivity.this); progressDialog.setCancelable(false); progressDialog.setMessage("Loading..."); progressDialog.show(); } @Override protected Void doInBackground(Void... voids) { Type listType = new TypeToken<ArrayList<BeanPost>>(){}.getType(); beanPostArrayList = new GsonBuilder().create().fromJson(loadJSONFromAsset(), listType); postList=new StringBuffer(); for(BeanPost post: beanPostArrayList){ postList.append("\n title: "+post.getPost_name()+"\n auther: "+post.getAuther()+"\n date: "+post.getDate()+"\n description: "+post.getDescription()+"\n\n"); } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); progressDialog.dismiss(); txtPostList.setText(postList); } }.execute(); } public String loadJSONFromAsset() { String json = null; try { InputStream is = getAssets().open("json.json"); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); json = new String(buffer, "UTF-8"); } catch (IOException ex) { ex.printStackTrace(); return null; } return json; } } |
در بالا از کلاس Async Task استفاده کردیم تا عمل پارس در Background انجام شود یک void به نام loadJSONFromAsset که مسیر فایل json را به دست آورده و آن را تبدیل به byte می کند. سپس آن را در یک فایل string به نام json برای پارس شدن قرار می دهد در زمان پارس شدن یک Progress bar برای شما نمایش داده می شود و زمانی که عمل پارس (تجزیه) به اتمام رسد.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.