Xem kết quả trả về Json
Xem kết quả ở định dạng Json trong Postman
Bạn chỉnh sửa thêm trong file api.php cho giống như dưới
= 1) {while ($row = mysql_fetch_assoc($resouter)) { $temparray<> = $row; } } echo json_encode($temparray);end:?>Để xem kết quả bạn chỉ cần thêm ?id= vào sau link lúc nãy http://localhost/student_manager/api.php?id=1 . Nếu bạn để id trống http://localhost/student_manager/api.php?id= nó sẽ trả về Vui lòng nhập id.
Đang xem: Lap trinh php, asp
Sau khi đã có Json bạn có thể parse json bằng retrofit trong android mình đã nói ở bài trước.
Json parsing with Retrofit
Json parsing with Retrofit
B1: Mở Android studio và tạo một project mới đặt tên WebService
B2: Thêm thư viện retrofit vào dependencies (Module: app)
dependencies {… // Retrofit compile 'com.squareup.retrofit2:retrofit:2.2.0' // JSON Parsing compile 'com.google.code.gson:gson:2.8.0' compile 'com.squareup.retrofit2:converter-gson:2.2.0'…}
B3: Thêm quyền truy cập INTERNET vào AndroidManifest.xml
B4: Tạo layout cho activity_main.xml
B5: Tạo Object class đặt tên Student và để trong package models
Các thuộc tính của class Student giống y chang như các trường của database, cái hạn chế của parse json bằng Retrofit nó nằm ở đấy, tổ chức cấu trúc của Json như thế nào thì trong đối tượng trong Android phải y như thế đấy. Mình mới nghiên cứu cái thư viện này thấy như thế, không biết là có pro nào làm việc nhiều với thư viện này có cách xử lý khác không rất mong được chỉ giáo, xin cảm ơn rất nhiều.
Cũng vì lý do này nên mình mới sửa class –> nclass, do lúc đầu mình tạo database là class nên đối tượng trong android cũng phải đặt theo class. Mà đặt tên thuộc tính của đối tượng là class trong android là không được phép, sẽ thông báo lỗi ngay, mà chỉ sửa class –> nclass trong android thì sẽ không parse được trường class trên webservice. Nên chỉ sửa 1 chút trên database với trong android là ok.
Override public String toString() { return “Student{” + “id=” + id + “, name='” + name + ''' + “, age=” + age + “, nclass='” + + ''' + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getNclass() { return nclass; } public void setNclass(String nclass) { this.nclass = nclass; }}
B6: Tạo class RetrofitClient
Để sử dụng các yêu cầu mạng đến một RESTful API bằng Retrofit, chúng ta cần tạo ra một đối tượng bằng cách sử dụng lớp Retrofit Builder và cấu hình nó với một URL cơ sở.
Ở APIService Interface này, chỗ getStudent(
Query của thư viện Retrofit để truy vấn dữ liệu ở ?id=.. theo như link trên browser là http://localhost/student_manager/api.php?id=.., ví dụ bạn muốn lấy student theo id và lớp chẳng hạn, bạn sẽ viết thành getStudent(
Query(“nclass”) String nclass) , link trên browser sẽ là http://localhost/student_manager/api.php?id=…?nclass=…
Ở đây còn một vấn đề nữa, Call> getStudent(
Query(“id”) String id); chỉ lấy một Student theo id mà tại sao lại cần dùng List. Lý do là lúc mình code service trả về Json là một Json Array mà 1 array thì sẽ có nhiều object nên Retrofit nó sẽ hiểu và trong android bắt buộc phải để Call> mặc dù trong Json Array đó chỉ có 1 Object. Nếu bạn muốn chỉ gọi Call thì lúc Service trả về Json phải là 1 Json Object.
Xem thêm: Bé 3 Tháng Không Bú Đêm ? Giải Đáp Thắc Mắc: Có Nên Cho Trẻ Bú Đêm
GET(“/student_manager/api.php”) Call> getStudents(); // GET student by id student from server // Server return json object
Query(“id”) String id);}
B8: Tạo class ApiUtils
Class ApiUtils dùng để khởi tạo Retrofit trong MainActivity và gọi các phương thức trong Interface APIService.
Ở đây mình chạy trên Emulator nên url mình để là http://10.0.2.2 còn nếu bạn chạy trên Genymotion sẽ đổi thành http://10.0.2.3
Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnGetStudent = (Button) findViewById(R.id.btnGetStudent); btnGetStudents = (Button) findViewById(R.id.btnGetStudents); tvResult = (TextView) findViewById(R.id.tvResult); mAPIService = ApiUtils.getAPIService(); btnGetStudent.setOnClickListener(this); btnGetStudents.setOnClickListener(this); }
B9: Set sự kiện OnClick cho 2 Button
Override public void onClick(View v) { switch (v.getId()) { case R.id.btnGetStudent: getStudentById(); break; case R.id.btnGetStudents: getAllStudents(); break; } } private void getAllStudents() { mAPIService.getStudents().enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { String result = “”; for (int i = 0; i > call, Throwable t) { Log.d(“onFailure”, t.toString()); } }); } private void getStudentById() { mAPIService.getStudent(“1”).enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { tvResult.setText(“ID: ” + response.body().get(0).getId() + “nName: ” + response.body().get(0).getName() + “nAge: ” + response.body().get(0).getAge() + “nClass: ” + response.body().get(0).getNclass()); } catch (Exception e) { Log.d(“onResponse”, “Error”); e.printStackTrace(); } }
Override public void onFailure(Call> call, Throwable t) { Log.d(“onFailure”, t.toString()); } }); }Code file MainActivity
package com.dev4u.ntc.webservice;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.dev4u.ntc.webservice.models.Student;import com.dev4u.ntc.webservice.webservice.APIService;import com.dev4u.ntc.webservice.webservice.ApiUtils;import java.util.List;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnGetStudent; private Button btnGetStudents; private TextView tvResult; private APIService mAPIService;
Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnGetStudent = (Button) findViewById(R.id.btnGetStudent); btnGetStudents = (Button) findViewById(R.id.btnGetStudents); tvResult = (TextView) findViewById(R.id.tvResult); mAPIService = ApiUtils.getAPIService(); btnGetStudent.setOnClickListener(this); btnGetStudents.setOnClickListener(this); }
Override public void onClick(View v) { switch (v.getId()) { case R.id.btnGetStudent: getStudentById(); break; case R.id.btnGetStudents: getAllStudents(); break; } } private void getAllStudents() { mAPIService.getStudents().enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { String result = “”; for (int i = 0; i > call, Throwable t) { Log.d(“onFailure”, t.toString()); } }); } private void getStudentById() { mAPIService.getStudent(“1”).enqueue(new Callback>() {
Override public void onResponse(Call> call, Response> response) { try { tvResult.setText(“ID: ” + response.body().get(0).getId() + “nName: ” + response.body().get(0).getName() + “nAge: ” + response.body().get(0).getAge() + “nClass: ” + response.body().get(0).getNclass()); } catch (Exception e) { Log.d(“onResponse”, “Error”); e.printStackTrace(); } }
Override public void onFailure(Call> call, Throwable t) { Log.d(“onFailure”, t.toString()); } }); }}Xem hướng dẫn Tạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 2
Project on Github: https://github.com/trongcong/WebServiceAndroid
Related PostGom Marker trong Android với Google Maps Android API – Google Maps Android Marker Clustering UtilitySử dụng SwipeRefreshLayout trong ứng dụng AndroidHướng dẫn tạo Material Dialog Bottom Sheet AndroidTạo context menu trong Android – ActionBar ActionMode.CallBack ExampleRetrofit và Volley thư viện nào tốt hơnHướng dẫn sử dụng thư viện Volley trong AndroidTạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 2Hàm chuyển đổi Timestamp thành Datetime trong Android và JavaScriptDesign Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 2)Design Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 1)