More Related Content Similar to Android json parsing (8) More from Энхтамир Ш (20) Android json parsing2. Агуулга
JSON гэж юу вэ?
JSON – ний бүтэц
JSON Array болон JSON объект
JSON болон XML
HTTP Calls
3. JSON гэж юу вэ?
JSON товчлол JavaScript Object Notation
Энгийн бүтэцтэй, дата хадгалах болон
солилцох өгөгдлийн нэг хэлбэр
Програмчлалын хэлнээс үл хамаарсан
JavaScript-н дэд олонлогт суурилсан
XML-c бага бичиглэлтэй
Ойлгоход хялбар формат
4. JSON бүтэц
JSON нь 2 үндсэн хэсэгтэй:
1. JSON Объект
Түлхүүр – Утга агуулна.
2. JSON Array
JSON объект агуулна
5. JSON бүтэц
JSON объект нь угалзан хаалтанд байрлана {}
{"овог":"Бат", "нэр":"Цэцэг"}
Түлхүүр(key) болон утга(value) хооронд тодорхойлох
хоёр цэг бичнэ :
"key":"value"
Олон түлхүүрүүд нь таслалаар зааглагдана. ,
JSON Array нь дөрвөлжин хаалтанд бичигдэнэ []
7. JSON болон XML
Төстэй тал:
Адилхан шаталсан бүтэцтэй
Тааг болон түлхүүрийг өөрөө тодорхойлдог
Ихэнх програмчлалын хэл дээр уншигдана
Ялгаатай тал:
JSON-д тааг байхгүй
XML-с богино бичиглэлтэй
Унших болон бичихэд JSON хурдан
JSON нь Array ашиглана.
JSON нь XML-с илүү хурдан, хялбар
8. Андройд HTTP дуудалт
HttpURLConnection класс нь веб хуудаснаас
өгөгдөл унших, дамжуулах үүрэгтэй.
Унших, дамжуулах өгөгдөл нь ямар ч
төрөлтэй урттай байж болно
9. HttpURLConnection
URL url = new URL(“url.хаяг”);
HttpURLConnection con =
(HttpURLConnection) url.openConnection();
try {
con.connect();
InputStream in = new
BufferedInputStream(con.getInputStream());
bufferedReader = new BufferedReader(new
InputStreamReader(in));
}
Finally {con.disconnect();}
10. Андройд AsyncTask
AsyncTask нь Андройд-с тодорхойлогдсон
хийсвэр класс
Энэ нь background task гүйцэтгэх
зориулалттай
Ажлыг гүйцэтгээд үр дүнг буцаадаг.
AsyncTask классаас өөрийн классыг
удамшуулж ажиллана.
execute() методоор ажиллуулж эхлэнэ.
Execute() метод нь doInBackground(),
onPostExecute() гэсэн методуудыг дуудна.
12. Жишээ
public class BackWork extends AsyncTask<String, String,
String>{
@Override
protected String doInBackground(String... params) {
try {
url = new URL(params[0]);
urlConnection = (HttpURLConnection)
url.openConnection();
urlConnection.connect();
inputStream = urlConnection.getInputStream();
bufferedReader = new BufferedReader(new
InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) !=
null) {
buffer.append(line);
}
return buffer.toString();
13. } catch (MalformedURLException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
finally {
try {
if (bufferedReader != null) { bufferedReader.close(); }
} catch (IOException e) { e.printStackTrace(); }
if (urlConnection != null) { urlConnection.disconnect(); }
}
return null;
}
@Override
protected void onPostExecute(String s)
{
super.onPostExecute(s);
txt1.setText(s.toString());
}
}
14. Жишээ
Button btnLoad;
TextView txt1;
HttpURLConnection urlConnection;
URL url;
InputStream inputStream;
BufferedReader bufferedReader;
btnLoad = (Button)findViewById(R.id.btnLoad);
txt1 = (TextView)findViewById(R.id.txt1);
btnLoad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new
BackWork().execute("http://192.100.0.146/jsonExample.json")
;
}
});
15. JSON Parsing
JSON өгөгдлийг задлан уншихийн тулд
JSONObject классын объектыг үүсгэнэ.
Бичигдэх хэлбэр:
String оролт;
JSONObject reader = new
JSONObject(оролт);
16. JSON Parsing
Хэрэв JSON файл нь олон төрлийн объект
агуулж буй бол дараах байдалтай уншина
JSONObject sys = reader.getJSONObject("sys");
country = sys.getString("country");
JSONObject main = reader.getJSONObject("main");
temperature = main.getString("temp");
getJSONObject метод нь JSON объект
буцаана.
getString метод нь өгөгдсөн түлхүүрт
харгалзах тэмдэгт мөр утга буцаана.
17. JSON объектийн методууд
get(String name) – Объект төрөлтэй утга буцаана.
getBoolean(String name) – Өгөгдсөн түлхүүрт
харгалзах boolean утга буцаана.
getDouble(String name) – Өгөгдсөн түлхүүрт
харгалзах бүхэл тоон утга буцаана.
getInt(String name), getLong(String name) – Өгөгдсөн
түлхүүрт харгалзах бүхэл тоон утга буцаана.
length() – JSON объект дах утгуудын тоог буцаана.
names() – json объект дах утгын нэрсийг array
төрөлтэй буцаана.
18. Жишээ
String jsonstring;
jsonstring = buffer.toString();
JSONObject jsonObject = new
JSONObject(jsonstring);
JSONArray workerArray =
jsonObject.getJSONArray("worker");
JSONObject ajiltan =
workerArray.getJSONObject(0);
String ner = ajiltan.getString("name");
String ovog = ajiltan.getString("last");
return ovog + " овогтой " +ner;
20. Олон объект унших
StringBuffer mur = new StringBuffer();
for(int i=0; i<workerArray.length();i++) {
JSONObject ajiltan =
workerArray.getJSONObject(i);
String ner = ajiltan.getString("name");
String ovog = ajiltan.getString("last");
mur.append(ovog + " овогтой " +ner+"n");
}
return mur.toString();
21. Java Model
Model ашигласнаар нэг объектоор
дамжуулан ижил талбаруудруу хандах
боломжтой болно.
23. public class StudentModel {
private String code;
private String ovog;
private String ner;
private int nas;
private String huis;
private String angi;
private int kurs;
private String zurag;
public String getCode(){
return code;
}
public void setCode(String code){
this.code = code;
}
24. public class Ajil extends AsyncTask<String,
String, List<StudentModel>>
{
@Override
protected List<StudentModel>
doInBackground(String... params) {
try {
URL url = new URL(params[0]);
25. List<StudentModel> studentModelList = new
ArrayList<>();
for(int i=0; i<jsonArray.length(); i++) {
JSONObject worker = jsonArray.getJSONObject(i);
StudentModel st = new StudentModel();
st.setCode(worker.getString("code"));
st.setOvog(worker.getString("ovog"));
st.setNer(worker.getString("ner"));
st.setNas(worker.getInt("nas"));
st.setHuis(worker.getString("huis"));
st.setAngi(worker.getString("angi"));
st.setKurs(worker.getInt("kurs"));
st.setZurag(worker.getString("zurag"));
studentModelList.add(st);
}
return studentModelList;
29. StudentAdapter нэртэй шинэ класс
үүсгэнэ.
public class StudentAdapter extends ArrayAdapter{
private List<StudentModel> studentModelList;
private int resource;
private LayoutInflater inflater;
public StudentAdapter(Context context, int resource,
List<StudentModel> objects) {
super(context, resource, objects);
studentModelList = objects;
this.resource = resource;
inflater = (LayoutInflater)
getSystemService(LAYOUT_INFLATER_SERVICE);
}
30. үргэлжлэл
@Override
public View getView(int position, View convertView, ViewGroup
parent) {
if(convertView==null)
{
convertView = inflater.inflate(R.layout.row, null );
}
final ImageView image;
final TextView txtCode;
final TextView txtOvog;
final TextView txtNer;
final TextView txtNas;
final TextView txtHuis;
final TextView txtAngi;
final TextView txtKurs;
final TextView txtZurag;
31. үргэлжлэл
image = (ImageView)convertView.findViewById(R.id.img1);
txtCode = (TextView)convertView.findViewById(R.id.txtCode);
txtOvog = (TextView)convertView.findViewById(R.id.txtOvog);
txtNer = (TextView)convertView.findViewById(R.id.txtNer);
txtNas = (TextView)convertView.findViewById(R.id.txtNas);
txtHuis = (TextView)convertView.findViewById(R.id.txtHuis);
txtAngi = (TextView)convertView.findViewById(R.id.txtAngi);
txtKurs = (TextView)convertView.findViewById(R.id.txtKurs);
txtZurag = (TextView)convertView.findViewById(R.id.txtZurag);
32. үргэлжлэл
try {
txtCode.setText("Код "+studentModelList.get(position).getCode());
txtOvog.setText("Овог "+studentModelList.get(position).getOvog());
txtNer.setText("Нэр "+studentModelList.get(position).getNer());
txtNas.setText("Нас: " + studentModelList.get(position).getNas());
txtHuis.setText("Хүйс "+studentModelList.get(position).getHuis());
txtAngi.setText("Анги "+studentModelList.get(position).getAngi());
txtKurs.setText("Курс "+studentModelList.get(position).getKurs());
txtZurag.setText("Зураг "+studentModelList.get(position).getZurag());
}
catch(NullPointerException e){e.printStackTrace();
Log.e("aldoo", e.toString());}
return convertView;
}
}
33. onPostExecute метод-н код
@Override
protected void
onPostExecute(List<StudentModel> s) {
super.onPostExecute(s);
//дэлгэцэнд харуулах код
StudentAdapter adapter = new
StudentAdapter(getApplicationContext(),
R.layout.row, s);
lv.setAdapter(adapter);
}
34. Андройд меню ашиглах
<?xml version="1.0" encoding="utf-8"?>
<menu
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"
tools:context=".MainActivity">
<item android:id="@+id/action_reload"
android:orderInCategory="100"
android:title="@string/reload"
app:showAsAction="never"/>
</menu>
35. Меню дарах үед ажиллах код
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id==R.id.action_reload)
{
new Ajil().execute("http://192.168.1.6/student.json");
return true;
}
return super.onOptionsItemSelected(item);
}
Editor's Notes Parsing – Өгүүлбэр зүйн задлан ялгал
Notation – тэмдэглэгээ, индекс AsyncTask have Four Main Method...onPreExecute()
doInBackground()
onProgressUpdate()
onPostExecute()
onPreExecute-This method is called first when you start AsyncTask using objAsync.execute().And mostly this method is use for initializing dialog(ProgressDialog,CustomDialog) and showing.
doInBackground-The main purpose of AsyncTask is accomplished by this method.Any non-UI thread process is running in this method.Such as Rss Feed Reader,Image and video Uploading and Downloading.You cant handle your View in this method.Because this method is non-UI thread.While any background process is running if you want to handle UI therea are onProgressUpdate method. after completion of process this method send result to OnPostExecute.
onProgressUpdate-While backgrounding task is running ,you can handle your UI using this method .Such as status of downloading or uploading task.and this method is called from doInBackground.Using publishProgress() you can call onProgressUpdate method to update UI while process is running.
onPostExecute -This method is called after the background computation finishes.The result of background process in passed in this method as parameters.And now you can dismiss progress dialog ,to indicate that background task is completed.