Tôi có thể sử dụng MySQL trong Android Studio không?
Xin chào các bạn, Đây là một Hướng dẫn khác về MySQL của Android, trong bài đăng này, chúng ta sẽ tìm hiểu thao tác CRUD cơ bản trong cơ sở dữ liệu MySQL từ Ứng dụng Android. Vì vậy, không lãng phí thời gian, hãy bắt đầu Hướng dẫn Android MySQL của chúng tôi Show
nội dung CRUD là gì?Tôi đoán nhiều bạn đã biết CRUD là gì. Nhưng nếu ai chưa biết thì CRUD là từ viết tắt của Basic Database Operations. Trong bất kỳ cơ sở dữ liệu nào, chúng tôi thực hiện các thao tác cơ bản sau
Vì vậy, về cơ bản trong bất kỳ cơ sở dữ liệu nào, chúng tôi thực hiện các thao tác được đề cập ở trên. Trong hướng dẫn này tôi sẽ sử dụng MySQL và PHP Tại sao lại là PHP và MySQL và Tại sao không phải là SQLite?Android cung cấp cho chúng tôi một tính năng của SQLite để sử dụng làm RDBMS cho ứng dụng của chúng tôi. Nhưng chúng tôi không thể chỉ sử dụng SQLite nếu chúng tôi đang xây dựng một ứng dụng. Điều này là do chúng tôi cần một máy chủ tập trung. SQLite là cục bộ cho mọi thiết bị, vì vậy nếu người dùng đang sử dụng ứng dụng của bạn, bạn sẽ không thể quản lý người dùng của mình nếu nó chỉ có trong SQLite. Đó là lý do tại sao chúng tôi cần một cơ sở dữ liệu tập trung để lưu trữ dữ liệu ứng dụng của mình Nếu bạn muốn tìm hiểu về SQLite bằng cách sử dụng PHÒNG Thành phần Kiến trúc mới nhất. Sau đó, đây là KHÓA HỌC MIỄN PHÍ hoàn chỉnh cho Cơ sở dữ liệu phòng Android. Chúng ta chỉ có PHP và MySQL cho việc này?Rõ ràng là KHÔNG? Bạn có thể sử dụng bất kỳ ứng dụng cơ sở dữ liệu hoặc ngôn ngữ kịch bản phía máy chủ nào. Tôi đang sử dụng ở đây PHP và MySQL vì nó dễ dàng có sẵn và tôi đã biết nó. 😛 (LOL) Nhưng nếu bạn là chuyên gia về Python hoặc JAVA hoặc NodeJS hoặc về cơ bản là bất kỳ công nghệ nào khác thì bạn có thể sử dụng nó. Nó sẽ chỉ thay đổi mã hóa phía máy chủ. Phần Android sẽ luôn giống nhau. Xây dựng API WebBước đầu tiên là xây dựng các API Web cần thiết. Điều này là do từ ứng dụng Android, để giao tiếp với máy chủ web của chúng tôi, chúng tôi cần một giao diện có tên là API Vì vậy, thiết bị Android của chúng tôi sẽ gửi yêu cầu tới API của chúng tôi, sau đó API của chúng tôi sẽ thực hiện tác vụ được yêu cầu và nó sẽ cung cấp cho chúng tôi phản hồi liên quan đến tác vụ. Bạn có thể xem sơ đồ bên dưới để rõ hơn Phản hồi mà máy chủ web đưa ra phải có cấu trúc chuẩn, để ở phía Android của chúng tôi, chúng tôi có thể dễ dàng phân tích cú pháp và lấy thông tin từ cấu trúc. Đối với điều này, mọi người hiện đang sử dụng JSON. Nếu bạn nghe thuật ngữ này lần đầu tiên thì bạn nên cân nhắc xem hướng dẫn nhanh về JSON trong 7 phút này Tôi đoán bạn đã có một ý tưởng cơ bản về nhiệm vụ mà chúng ta sẽ thực hiện trong hướng dẫn này Tạo cơ sở dữ liệuRõ ràng là trước tiên chúng ta cần có cơ sở dữ liệu 😛. Vì vậy, ở đây tôi đang sử dụng XAMPP (Bạn có thể sử dụng wamp hoặc đèn cũng được). Vì vậy, trước tiên hãy tạo cơ sở dữ liệu sau
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-- được tạo bởi Belal Khan -- trang web . www. mã hóa đơn giản. mạng -- bảng -- Bảng . anh hùng TẠO BẢNG anh hùng ( id int NOT NULL AUTO_INCREMENT, tên varchar ( 200) NOT NULL, tên thật varchar ( 200) NOT NULL, xếp hạng int NOT NULL, liên kết nhóm varchar ( 100) NOT NULL, HÀNG CHẾ heroes_pk CHÍNH CHÍNH KEY (id) );
-- Kết thúc của tệp .
Tạo dự án PHPBây giờ để thực hiện các Thao tác cơ sở dữ liệu, chúng ta sẽ tạo một Dự án PHP
Cấu trúc dự án
Xác định hằng số
1 2 3 4 5 6 7 8 9 10 11 12 13
/* * Được tạo bởi Belal Khan * trang mạng. www. mã hóa đơn giản. bọc lưới */ xác định ( 'DB_HOST' , 'localhost'); xác định ( 'DB_USER' , 'root'); xác định ( 'DB_PASS' , ''<); xác định ( 'DB_NAME' , 'android');
Kết nối với cơ sở dữ liệu
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
/* * Được tạo bởi Belal Khan * trang mạng. www. mã hóa đơn giản. bọc lưới */ // Lớp DbConnect lớp DbConnect { //Biến để lưu trữ liên kết cơ sở dữ liệu riêng tư $con ; //Hàm tạo lớp hàm __construct () { } // Phương thức này sẽ kết nối với cơ sở dữ liệu chức năng kết nối () { // Bao gồm các hằng số. php để lấy hằng số cơ sở dữ liệu include_once tên thư mục ( __FILE__ ) . '/Hằng số. php' ; // kết nối với cơ sở dữ liệu mysql $this - >con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); //Kiểm tra lỗi khi kết nối if ( mysqli_connect_errno ()) { echo "Không thể kết nối với MySQL. " . mysqli_connect_error (); } //cuối cùng trả lại liên kết kết nối return $this - >con; } }
Thực hiện các thao tác cơ sở dữ liệu
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
lớp DbOperation { //Liên kết kết nối cơ sở dữ liệu riêng tư $con ; //Hàm tạo lớp hàm __construct () { //Nhận DbConnect. tệp php require_once tên thư mục ( __FILE__) . '/DbConnect. php' ; //Tạo đối tượng DbConnect để kết nối với cơ sở dữ liệu $db = mới DbConnect(); //Đang khởi tạo liên kết kết nối của lớp này //bằng cách gọi phương thức connect của lớp DbConnect $this - >con = $db->connect(); } /* * Thao tác tạo * Khi phương thức này được gọi, một bản ghi mới được tạo trong cơ sở dữ liệu */ function createHero ( $name , $realname, $rating, $teamaffiliation){ $stmt = $this - >con->prepare("INSERT INTO heroes (name, realname, rating, teamaffiliation) VALUES (?, ?, ?, ?)"); $stmt - >bind_param ( "ssis", $name, $realname, $rating, $teamaffiliation); if ( $stmt - >execute()) return true ; trả về false ; }
/* * Thao tác đọc * Khi phương thức này được gọi, nó sẽ trả về tất cả bản ghi hiện có của cơ sở dữ liệu */ function getHeroes (){ $stmt = $this - >con->prepare("SELECT id, name, realname, rating, teamaffiliation FROM heroes"); $stmt - >thực thi ();< $stmt - >bind_result ( $id, $name, $realname, $rating, $teamaffiliation); $heroes = mảng (); while ( $stmt - >fetch()){ $hero = mảng (); $hero [ 'id' ] =< $id; $hero [ 'name' ] =< $name; $hero [ 'realname' ] =< $realname; $hero [ 'rating' ] =< $rating; $hero [ 'teamaffiliation' ] =< $teamaffiliation; array_push ( $heroes , $heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes$heroes); } return $heroes ; } /* * Thao tác cập nhật * Khi phương thức này được gọi, bản ghi với id đã cho được cập nhật với các giá trị đã cho mới */ function updateHero ( $id , $name, $realname, $rating, $teamaffiliation){ $stmt = $this - >con->prepare("UPDATE heroes SET name = ?, realname = ?, rating = ?, teamaffiliation = ? WHERE id = ?"); $stmt - >bind_param ( "ssisi", $name, $realname, $rating, $teamaffiliation, $id); if ( $stmt - >execute()) return true ; trả về false ; } /* * Thao tác xóa * Khi phương thức này được gọi, bản ghi sẽ bị xóa đối với id đã cho */ function deleteHero ( $id ){ $stmt = $this - >con->prepare("DELETE FROM heroes WHERE id = ? "); $stmt - >bind_param ( "i", $id); if ( $stmt - >execute()) return true ; trả về false ; } }
Xử lý lệnh gọi API
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
//lấy lớp dboperation require_once '. /gồm/DbOperation. php' ;
// hàm xác nhận tất cả các tham số có sẵn // chúng ta sẽ truyền các tham số cần thiết cho hàm này function isTheseParametersAvailable ( $params ){ // giả sử tất cả các tham số có sẵn $có sẵn = true ; $missingparams = "" ; foreach ( $params as $param){ nếu (. isset ( $_POST [ . ]) || strlen ( $_POST [ $param])<=0){ $có sẵn = false ; $missingparams = $missingparams . ", " . $param ; } } // nếu thiếu tham số nếu (. $có sẵn ){ $response = mảng (); $response [ 'lỗi' ] =< true; $response [ 'tin nhắn' ] =< . 'Parameters ' . substr ( $missingparams , . , strlen($missingparams)) . ' thiếu' ; //hiển thị lỗi echo json_encode ( $response ); // dừng thực hiện thêm chết (); } } //một mảng để hiển thị phản hồi $response = mảng (); // nếu đó là một cuộc gọi api // điều đó có nghĩa là tham số get có tên lệnh gọi api được đặt trong URL // và với tham số này, chúng tôi kết luận rằng đó là một cuộc gọi api if ( isset ( $_GET['apicall'])){ switch ( $_GET [ 'apicall'<]){ // thao tác TẠO // nếu giá trị cuộc gọi api là 'createhero' //chúng ta sẽ tạo một bản ghi trong cơ sở dữ liệu trường hợp 'tạo anh hùng' . // đầu tiên kiểm tra các tham số cần thiết cho yêu cầu này có sẵn hay không isTheseParametersAvailable ( mảng ( 'name','realname','rating','teamaffiliation')); //tạo một đối tượng dboperation mới $db = new DbOperation ();< //tạo một bản ghi mới trong cơ sở dữ liệu $result = $db - >createHero( $_POST [ 'name' ], $_POST [ 'realname' ], $_POST [ 'xếp hạng' ], $_POST [ 'liên kết nhóm' ] );
// nếu bản ghi được tạo thêm thành công vào phản hồi if ( $result ){ //bản ghi được tạo nghĩa là không có lỗi $response [ 'lỗi' ] =< false;
// trong tin nhắn chúng tôi có một thông báo thành công $response [ 'tin nhắn' ] =< 'Hero addedd successfully';
// và chúng tôi đang nhận được tất cả các anh hùng từ cơ sở dữ liệu trong phản hồi $response [ 'anh hùng' ] =< $db->getHeroes(); } khác {
// nếu bản ghi không được thêm vào có nghĩa là có lỗi $response [ 'lỗi' ] =< true;
// và chúng tôi có thông báo lỗi $response [ 'tin nhắn' ] =< 'Some error occurred please try again'; } phá vỡ ; // thao tác ĐỌC // nếu cuộc gọi là getheroes trường hợp 'gặp anh hùng' . $db = new DbOperation ();< $response [ 'lỗi' ] =< false; $response [ 'tin nhắn' ] =< 'Request successfully completed'; $response [ 'anh hùng' ] =< $db->getHeroes(); phá vỡ ; // thao tác CẬP NHẬT trường hợp 'updatehero' . isTheseParametersAvailable ( mảng ( 'id','name','realname','rating','teamaffiliation')); $db = new DbOperation ();< $result = $db - >updateHero( $_POST [ 'id' ], $_POST [ 'name' ], $_POST [ 'realname' ], $_POST [ 'xếp hạng' ], $_POST [ 'liên kết nhóm' ] ); if ( $result ){ $response [ 'lỗi' ] =< false; $response [ 'tin nhắn' ] =< 'Hero updated successfully'; $response [ 'anh hùng' ] =< $db->getHeroes(); } khác { $response [ 'lỗi' ] =< true; $response [ 'tin nhắn' ] =< 'Some error occurred please try again'; } phá vỡ ; // thao tác xóa trường hợp 'deletehero' .
// đối với thao tác xóa, chúng tôi nhận được tham số GET từ url có id của bản ghi sẽ bị xóa if ( isset ( $_GET['id'])){ $db = new DbOperation ();< if ( $db - >deleteHero($_GET['id'])){ $response [ 'lỗi' ] =< false; $response [ 'tin nhắn' ] =< 'Hero deleted successfully'; $response [ 'anh hùng' ] =< $db->getHeroes(); } khác { $response [ 'lỗi' ] =< true; $response [ 'tin nhắn' ] =< 'Some error occurred please try again'; } } khác { $response [ 'lỗi' ] =< true; $response [ 'tin nhắn' ] =< 'Nothing to delete, provide an id please'; } phá vỡ ; } } khác { // nếu đó không phải là cuộc gọi api // đẩy các giá trị thích hợp vào mảng phản hồi $response [ 'lỗi' ] =< true; $response [ 'tin nhắn' ] =< 'Invalid API Call'; } //hiển thị phản hồi trong cấu trúc json echo json_encode ( $response );
Kiểm tra các lệnh gọi API
Tạo hoạt độngĐọc hoạt độngHoạt động cập nhậtThao tác xóaBạn thấy tất cả các hoạt động đang hoạt động hoàn toàn tốt. Bây giờ chúng ta có thể tiếp tục tạo Dự án Android của mình. Nhưng trước khi chuyển sang phía bên dưới Android, bạn có thể xem URL API của chúng tôi Hoàn tất cuộc gọi API
Bạn muốn khám phá việc xây dựng API RESTful?Ở đây chúng tôi đã xây dựng một API rất cơ bản thể hiện hoạt động CRUD. Nhưng trong các tình huống trong thế giới thực, chúng tôi sử dụng FRAMEWORKS để tạo API dễ dàng và có cấu trúc. Nếu bạn muốn tìm hiểu thêm một chút về cách xây dựng API RESTful. Sau đó, bạn nên kiểm tra khóa học sau. Nó hoàn toàn MIỄN PHÍ Hướng dẫn Android MySQLChúng tôi có Dịch vụ web của mình và bây giờ chúng tôi có thể xây dựng ứng dụng Android. Vì vậy, hãy bắt đầu Tạo một dự án mới
Tạo các lớp trợ giúpLớp để lưu trữ URL API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
gói mạng. học tập đơn giản. myheroapp ;
/** * Được tạo bởi Belal vào ngày 9/9/2017 */
lớp công khai Api {
riêng tư tĩnh cuối cùng Chuỗi ROOT_URL = "http://192.168.101.1/HeroApi/v1/Api.php?apicall=" ;
công khai tĩnh cuối cùng Chuỗi URL_CREATE_HERO = ROOT_URL + "createhero"; công khai tĩnh cuối cùng Chuỗi URL_READ_HEROES = ROOT_URL + "getheroes"; công khai tĩnh cuối cùng Chuỗi URL_UPDATE_HERO = ROOT_URL + "updatehero"; công khai tĩnh cuối cùng Chuỗi URL_DELETE_HERO = ROOT_URL + "deletehero&id=";
}
Lớp người mẫu anh hùng
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
gói mạng. học tập đơn giản. myheroapp ;
nhập java. io. Có thể tuần tự hóa ;
/** * Được tạo bởi Belal vào ngày 9/9/2017 */
đẳng cấp Anh hùng { riêng tư int id ; riêng tư Chuỗi tên , realname; riêng tư int xếp hạng ; riêng tư Chuỗi liên kết nhóm ;
công chúng Anh hùng ( int id, String name, String realname, int rating, String teamaffiliation) { cái này. là = id ; cái này. tên = tên ; cái này. tên thật = tên thật ; cái này. xếp hạng = xếp hạng ; cái này. liên kết nhóm = liên kết nhóm ; }
public int getId () { return là ; }
công khai Chuỗi getName () { trả về tên ; }
công khai Chuỗi getRealname () { return tên thật ; }
công khai int getRating () { trả về xếp hạng ; }
public String getTeamaffiliation () { return liên kết nhóm ; } }
Trình xử lý yêu cầu
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
gói mạng. học tập đơn giản. myheroapp ;
nhập java. io. BufferedReader ; nhập java. io. BufferedWriter ; nhập java. io. InputStreamReader ; nhập java. io. Luồng đầu ra ; nhập java. io. OutputStreamWriter ; nhập java. io. UnsupportedEncodingException ; nhập java. mạng. Kết nối httpURL ; nhập java. mạng. URL ; nhập java. mạng. URLEncoder ; nhập java. sử dụng. HashMap ; nhập java. sử dụng. Bản đồ ;
nhập javax. mạng. ssl. Kết nối HttpsURL ;
/** * Được tạo bởi Belal vào ngày 9/9/2017 */ lớp công khai RequestHandler {
//Phương thức gửi httpPostRequest //Phương thức này nhận hai đối số //Đối số đầu tiên là URL của tập lệnh mà chúng tôi sẽ gửi yêu cầu tới //Khác là HashMap với các cặp giá trị tên chứa dữ liệu sẽ được gửi cùng với yêu cầu công khai Chuỗi sendPostRequest ( String requestURL, HashMap<Chuỗi , String> postDataParams) { //Tạo URL URL url ;
//Đối tượng StringBuilder để lưu trữ thư được truy xuất từ máy chủ StringBuilder sb = mới StringBuilder(); thử { //Đang khởi tạo Url url = mới URL(requestURL);
//Tạo kết nối htmllurl Kết nối httpURL conn = ( HttpURLConnection) url.openConnection ();
//Định cấu hình thuộc tính kết nối kết nối. setReadTimeout ( 15000 ); kết nối. setConnectTimeout ( 15000 ); kết nối. setRequestMethod ( "POST" ); kết nối. setDoInput ( true ); kết nối. setDoOutput ( true );
//Tạo luồng đầu ra OutputStream os = conn.getOutputStream ();
//Ghi tham số vào yêu cầu //Chúng tôi đang sử dụng một phương thức getPostDataString được xác định bên dưới BufferedWriter writer = new BufferedWriter( mới OutputStreamWriter ( os, "UTF-8")); nhà văn. ghi ( getPostDataString ( postDataParams));
nhà văn. xả (); nhà văn. đóng (); os. đóng (); int mã phản hồi = conn.getResponseCode ();
if ( Mã phản hồi == HttpsURLConnection.HTTP_OK ) {
BufferedReader br = mới BufferedReader(new InputStreamReader(conn.getInputStream ())); sb = mới StringBuilder(); Chuỗi phản hồi ; //Đọc phản hồi của máy chủ trong khi (( phản hồi = br.readLine ()) . = null ) { sb. chắp thêm ( phản hồi ); } }
} bắt ( Ngoại lệ e) { e. printStackTrace (); } return sb. toString (); }
công khai Chuỗi sendGetRequest ( String requestURL) { StringBuilder sb = mới StringBuilder(); thử { URL url = mới URL(requestURL); Kết nối httpURL con = ( HttpURLConnection) url.openConnection (); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream ()));
Chuỗi s ; while (( s = bufferedReader.readLine ()) . = null ) { sb. chắp thêm ( s + "); } } bắt ( Ngoại lệ e) { } return sb. toString (); }
riêng tư Chuỗi getPostDataString ( HashMap<String, String> params) throws UnsupportedEncodingException { StringBuilder kết quả = mới StringBuilder(); boolean first = true; cho ( Bản đồ. Mục nhập<Chuỗi , Chuỗi . > entry : tham số. entrySet ()) { nếu ( đầu tiên ) đầu tiên = sai ; else kết quả. chắp thêm ( "&" );
kết quả. chắp thêm ( URLEncoder. mã hóa ( mục nhập. getKey (), "UTF-8" )); kết quả. chắp thêm ( "=" ); kết quả. chắp thêm ( URLEncoder. mã hóa ( mục nhập. getValue (), "UTF-8" )); }
trả về kết quả. toString (); } }
Xác định quyền truy cập Internet trong AndroidManifest
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
xml phiên bản="1. 0"mã hóa="utf-8"?>xml version="1.0" encoding="utf-8"?> <tệp kê khai xmlns. android = "http. // lược đồ. Android. com/apk/res/android" gói = "net. đơn giản hóa học tập. myheroapp">
< . -- đây là là mạng permission --> <sử dụng - quyền android:tên = "android. sự cho phép. INTERNET" / >
<ứng dụng android. usesCleartextTraffic = "true" android. cho phép sao lưu = "true" android. biểu tượng = "@mipmap/ic_launcher" android. nhãn = "@string/app_name" android. roundIcon = "@mipmap/ic_launcher_round" android. supportsRtl = "true" android. chủ đề = "@style/AppTheme"> <hoạt động android. tên = ". MainActivity"> <ý định - bộ lọc> <hành động android. tên = "android. ý định. hoạt động. CHÍNH" / >
<danh mục android. tên = "android. ý định. thể loại. LAUNCHER" / > < / ý định - filter> < / hoạt động> < / ứng dụng>
< / tệp kê khai>
Thiết kế giao diện người dùng
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 72 73 74 75 76 77 78
xml phiên bản="1. 0"mã hóa="utf-8"?>xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns. android = "http. // lược đồ. Android. com/apk/res/android" xmlns. công cụ = "http. // lược đồ. Android. com/công cụ" android. layout_width = "match_parent" android. layout_height = "match_parent" công cụ. bối cảnh = "net. đơn giản hóa học tập. myheroapp. MainActivity">
<LinearLayout android. là = "@+id/linearLayout" android. layout_width = "match_parent" android. layout_height = "wrap_content" android. layout_alignParentTop = "true" android. hướng = "dọc" android. đệm = "16dp">
<Chỉnh sửa văn bản android. là = "@+id/editText HeroIda> android. layout_width = "match_parent" android. layout_height = "wrap_content" android. khả năng hiển thị = "ra đi" / >
<Chỉnh sửa văn bản android. là = "@+id/editTextName" android. layout_width = "match_parent" android. layout_height = "wrap_content" android. layout_marginBottom = "8dp" android. layout_marginTop = "8dp" android. gợi ý = "Tên" / >
<Chỉnh sửa văn bản android. là = "@+id/editText Tên thật" android. layout_width = "match_parent" android. layout_height = "wrap_content" android. layout_marginBottom = "8dp" android. layout_marginTop = "8dp" android. gợi ý = "Tên thật" / >
<Thanh xếp hạng android. id = "@+id/ratingBar" android. layout_width = "wrap_content" android. layout_height = "wrap_content" android. numStars = "5" android. kích thước bước = "1" / >
<Trình quay android. is = "@+id/spinner Liên kết nhóm" android. layout_width = "match_parent" android. layout_height = "wrap_content" android. layout_marginBottom = "8dp" android. layout_marginTop = "8dp" android. bài viết = "@array/teams" / >
<Nút android. là = "@+id/buttonAddUpdate" android. layout_width = "match_parent" android. layout_height = "wrap_content" android. văn bản = "Thêm" / > < / LinearLayout>
<Chế độ xem danh sách android. is = "@+id/listView Heroes" android. layout_width = "match_parent" android. layout_height = "wrap_content" android. layout_below = "@id/linearLayout" / >
<Thanh tiến trình android. is = "@+id/progressBar" android. layout_width = "wrap_content" android. layout_height = "wrap_content" android. layout_centerHorizontal = "true" android. layout_centerVertical = "true" android. khả năng hiển thị = "ra đi" / >
< / RelativeLayout>
1 2 3 4 5 6 7 8 9 10 11 12 13
<tài nguyên> <chuỗi tên = "app_name">Android MySQL CRUD</string>
< . -- xác định mảng cho our spinner --> <mảng tên = "teams"> <mục>Avengers</item> <mục>Công lý League</item> <mục>X-Men</item> <mục>Tuyệt vời Four</item> < / mảng> < / tài nguyên>
Lớp thực hiện yêu cầu mạng
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
//lớp bên trong để thực hiện yêu cầu mạng mở rộng AsyncTask lớp riêng tư PerformNetworkRequest mở rộng AsyncTask<Void, Void, String> {
//url nơi chúng tôi cần gửi yêu cầu Chuỗi url ;
//các thông số HashMap<Chuỗi , String> params;
//mã yêu cầu để xác định đó là NHẬN hay ĐĂNG int mã yêu cầu ;
//hàm tạo để khởi tạo giá trị PerformNetworkRequest ( Chuỗi url, HashMap<String, String> params, int requestCode) { này. url = url ; này. tham số = tham số ; này. requestCode = requestCode ; }
//thời điểm tác vụ bắt đầu hiển thị thanh tiến trình @Ghi đè được bảo vệ vô hiệu onPreExecute () { siêu. onPreExecute (); thanh tiến trình. setVisibility ( Xem. Hiển thị ); }
//phương thức này sẽ đưa ra phản hồi từ yêu cầu @Ghi đè được bảo vệ vô hiệu onPostExecute ( String s) { siêu. onPostExecute ( s ); thanh tiến trình. setVisibility ( ĐI ); thử { Đối tượng JSON đối tượng = mới JSONObject(s); nếu (. đối tượng. getBoolean ( "lỗi" )) { Nướng. makeText ( getApplicationContext (), object.getString ( "nội dung" ), Toast.LENGTH_SHORT ). hiển thị (); //làm mới danh sách anh hùng sau mỗi hoạt động //để chúng tôi nhận được danh sách cập nhật //chúng ta sẽ tạo phương thức này ngay bây giờ nó được nhận xét //vì chúng tôi chưa tạo nó //refreshHeroList(object. getJSONArray("anh hùng")); } } catch ( JSONException e) { e. printStackTrace (); } }
//hoạt động mạng sẽ được thực hiện ở chế độ nền @Ghi đè chuỗi được bảo vệ doInBackground ( Void... khoảng trống ) { RequestHandler requestHandler = new RequestHandler();
if ( requestCode == CODE_POST_REQUEST) return requestHandler. sendPostRequest ( url , tham số);
if ( requestCode == CODE_GET_REQUEST) return requestHandler. sendGetRequest ( url );
return null ; } }
Tạo hoạt động
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
lớp công khai MainActivity mở rộng AppCompatActivity {
riêng tư tĩnh cuối cùng int CODE_GET_REQUEST = 1024; riêng tư tĩnh cuối cùng int CODE_POST_REQUEST = 1025;
//xác định chế độ xem EditText editTextHeroId , editTextName, editTextRealname; RatingBar ratingBar ; Người quay Đội người quay ; Thanh tiến trình thanh tiến trình ; ListView listView ; Nút buttonAddUpdate ;
//chúng tôi sẽ sử dụng danh sách này để hiển thị hero trong chế độ xem danh sách Danh sách
//do cùng một nút được sử dụng để tạo và cập nhật //chúng tôi cần theo dõi xem đó là hoạt động cập nhật hay tạo //đối với điều này, chúng tôi có boolean này boolean isUpdating = false;
@Override được bảo vệ vô hiệu hóa onCreate ( Bundle savedInstanceState) { siêu. onCreate ( savedInstanceState ); setContentView ( R. bố cục. hoạt_động_chính );
editTextHeroId = ( EditText) findViewById(R.id. editTextHeroId ); editTextName = ( EditText) findViewById(R.id. editTextName ); editTextTên thật = ( EditText) findViewById(R.id. editTextRealname ); Thanh xếp hạng = ( Thanh xếp hạng) findViewById(R.id. Thanh xếp hạng ); Nhóm người quay = ( Người quay) findViewById(R.id. spinnerTeamAffiliation );
buttonAddUpdate = ( Button) findViewById(R.id. buttonAddUpdate );
thanh tiến trình = ( Thanh tiến trình) findViewById(R.id. thanh tiến trình ); listView = ( ListView) findViewById(R.id. listViewHeroes );
Danh sách anh hùng = mới Danh sách mảng<>();
nútThêm cập nhật. setOnClickListener ( mới Chế độ xem. OnClickListener () { @Override công khai vô hiệu onClick ( View view) { //nếu đang cập nhật nếu ( đang cập nhật ) { //gọi anh hùng cập nhật phương pháp //phương thức được cam kết vì nó chưa được tạo //updateHero(); } khác { //nếu nó không cập nhật //điều đó có nghĩa là nó đang tạo //gọi phương thức này là tạo anh hùng createHero (); } } });
//gọi phương thức đã đọc hero để đọc hero hiện có từ cơ sở dữ liệu //phương thức được nhận xét vì nó chưa được tạo //readHeroes(); }
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
riêng tư void createHero () { Chuỗi tên = editTextName.getText (). toString (). cắt (); Chuỗi tên thật = editTextTên thật.getText (). toString (). cắt ();
int xếp hạng = ( int) ratingBar.getRating ();
Chuỗi nhóm = spinnerTeam.getSelectedItem (). toString ();
//xác thực thông tin đầu vào if ( TextUtils. isEmpty ( tên )) { editTextName. setError ( "Vui lòng nhập tên" ); editTextName. requestFocus (); return ; }
if ( TextUtils. isEmpty ( tên thật )) { editTextRealname. setError ( "Vui lòng nhập tên thật" ); editTextRealname. requestFocus (); return ; }
//nếu xác thực thành công
HashMap<Chuỗi , String> params = new HashMap<>(); thông số. đặt ( "tên" , name); thông số. đặt ( "tên thật" , realname); thông số. đặt ( "xếp hạng" , String.valueOf ( xếp hạng )); thông số. đặt ( "liên kết nhóm" , team);
//Gọi API tạo anh hùng PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_CREATE_HERO , tham số , CODE_POST_REQUEST); yêu cầu. thực thi (); }
Đọc hoạt động
Bố cục danh sách
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
xml phiên bản="1. 0"mã hóa="utf-8"?>xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns. android = "http. // lược đồ. Android. com/apk/res/android" android. layout_width = "match_parent" android. layout_height = "match_parent" android. hướng = "ngang" android. đệm = "8dp">
<Chế độ xem văn bản android. is = "@+id/textViewName" android. layout_width = "wrap_content" android. layout_height = "wrap_content" android. layout_alignParentLeft = "true" android. layout_weight = "8" android. văn bản = "Đội trưởng Mỹ" android. textAppearance = "@style/Base. Giao diện văn bản. Ứng dụngCompat. Trung bình" / >
<Chế độ xem văn bản android. textStyle = "bold" android. là = "@+id/textViewUpdate" android. layout_width = "wrap_content" android. layout_height = "wrap_content" android. layout_alignBottom = "@+id/textViewDelete" android. layout_toLeftOf = "@+id/textViewDelete" android. layout_toStartOf = "@+id/textViewDelete" android. đệm = "5dp" android. văn bản = "Cập nhật" android. textColor = "#498C1A" / >
<Chế độ xem văn bản android. textStyle = "bold" android. là = "@+id/textViewDelete" android. layout_width = "wrap_content" android. layout_height = "wrap_content" android. layout_alignParentRight = "true" android. đệm = "5dp" android. văn bản = "Xóa" android. textColor = "#C20A10" / >
< / RelativeLayout>
Lớp bộ điều hợp tùy chỉnh
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 72 73 74 75 76 77 78 79 80 81 82
class HeroAdapter mở rộng ArrayAdapter
//danh sách anh hùng của chúng ta Danh sách
//hàm tạo để lấy danh sách công khai HeroAdapter ( Danh sách siêu ( MainActivity. này , R. bố cục. layout_hero_list , heroList ); này. Danh sách anh hùng = Danh sách anh hùng ; }
//phương thức trả về mục danh sách @Ghi đè công khai Xem nhận được Xem ( int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); Xem listViewItem = tăng.thổi phồng ( R. bố cục. layout_hero_list , null , true);
//nhận chế độ xem văn bản để hiển thị tên Chế độ xem văn bản textViewName = listViewItem.findViewById ( R. id. textViewName );
//cập nhật và xóa chế độ xem văn bản Chế độ xem văn bản textViewUpdate = listViewItem.findViewById ( R. id. Cập nhật chế độ xem văn bản ); Chế độ xem văn bản textViewDelete = listViewItem.findViewById ( R. id. Xóa chế độ xem văn bản );
trận chung kết Anh hùng anh hùng = heroList.nhận ( vị trí );
textViewName. setText ( anh hùng. getName ());
//đính kèm trình xử lý nhấp chuột để cập nhật textViewUpdate. setOnClickListener ( mới Chế độ xem. OnClickListener () { @Ghi đè công khai vô hiệu onClick ( View view) { //vì vậy khi cập nhật, chúng tôi sẽ //biến isUpdating thành true đang cập nhật = true ;
//chúng tôi sẽ đặt anh hùng đã chọn thành các phần tử giao diện người dùng editTextHeroId. setText ( Chuỗi. valueOf ( anh hùng. getId ())); editTextName. setText ( anh hùng. getName ()); editTextRealname. setText ( anh hùng. getRealname ()); Thanh xếp hạng. setRating ( anh hùng. getRating ()); spinnerTeam. setSelection ((( ArrayAdapter
//chúng tôi cũng sẽ đặt văn bản cho nút là Cập nhật buttonAddUpdate. setText ( "Cập nhật" ); } });
//khi người dùng chọn xóa textViewDelete. setOnClickListener ( mới Chế độ xem. OnClickListener () { @Ghi đè công khai vô hiệu onClick ( View view) {
// chúng tôi sẽ hiển thị hộp thoại xác nhận trước khi xóa AlertDialog. Trình xây dựng trình xây dựng = mới AlertDialog . .Trình tạo ( MainActivity. này );
người xây dựng. setTitle ( "Xóa " + hero.getName ()) . setMessage ( "Bạn có chắc chắn muốn xóa nó không?" ) . setPositiveButton ( android. R. chuỗi. có , mới Giao diện Hộp thoại. OnClickListener () { công khai vô hiệu onClick ( DialogInterface dialog, int which) { //nếu lựa chọn là có, chúng tôi sẽ xóa anh hùng //phương thức được nhận xét vì nó chưa được tạo //deleteHero(anh hùng. getId()); } }) . setNegativeButton ( android. R. chuỗi. không , mới Giao diện hộp thoại. OnClickListener () { công khai vô hiệu onClick ( DialogInterface dialog, int which) { } }) . setIcon ( android. R. có thể vẽ được. ic_dialog_alert ) . hiển thị ();
} });
return listViewItem ; } }
Truy xuất các anh hùng từ cơ sở dữ liệu
1 2 3 4 5 6
riêng tư void readHeroes () { PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_READ_HEROES , null , CODE_GET_REQUEST); yêu cầu. thực thi (); }
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
riêng tư void refreshHeroList ( JSONArray heroes) throws JSONException { //hoàn thành các anh hùng trước đó Danh sách anh hùng. xóa ();
//duyệt qua tất cả các mục trong mảng json //số json mà chúng tôi nhận được từ phản hồi cho ( int i = 0; i < heroes.độ dài (); i ++) { //nhận từng đối tượng anh hùng JSONObject obj = anh hùng.getJSONObject ( i );
//thêm anh hùng vào danh sách Danh sách anh hùng. thêm ( mới Anh hùng ( obj. getInt ( "id" ), obj. getString ( "tên" ), obj. getString ( "tên thật" ), obj. getInt ( "xếp hạng" ), obj. getString ( "liên kết nhóm" ) )); }
//tạo bộ điều hợp và đặt nó vào chế độ xem danh sách HeroAdapter bộ chuyển đổi = mới HeroAdapter(heroList); listView. setAdapter ( bộ chuyển đổi ); }
Hoạt động cập nhật
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
riêng tư void updateHero () { Chuỗi id = editTextHeroId.getText (). toString (); Chuỗi tên = editTextName.getText (). toString (). cắt (); Chuỗi tên thật = editTextTên thật.getText (). toString (). cắt ();
int xếp hạng = ( int) ratingBar.getRating ();
Chuỗi nhóm = spinnerTeam.getSelectedItem (). toString ();
if ( TextUtils. isEmpty ( tên )) { editTextName. setError ( "Vui lòng nhập tên" ); editTextName. requestFocus (); return ; }
if ( TextUtils. isEmpty ( tên thật )) { editTextRealname. setError ( "Vui lòng nhập tên thật" ); editTextRealname. requestFocus (); return ; }
HashMap<Chuỗi , String> params = new HashMap<>(); thông số. đặt ( "id" , id); thông số. đặt ( "tên" , name); thông số. đặt ( "tên thật" , realname); thông số. đặt ( "xếp hạng" , String.valueOf ( xếp hạng )); thông số. đặt ( "liên kết nhóm" , team);
PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_UPDATE_HERO , tham số , CODE_POST_REQUEST); yêu cầu. thực thi ();
nútThêm cập nhật. setText ( "Add" );
editTextName. setText ( "" ); editTextTên thật. setText ( "" ); Thanh xếp hạng. setRating ( 0 ); Đội spinner. setSelection ( 0 );
đang cập nhật = false ; }
Thao tác xóa
1 2 3 4 5 6
riêng tư void deleteHero ( int id) { PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_DELETE_HERO + id , null, CODE_GET_REQUEST); yêu cầu. thực thi (); }
Mã hoàn chỉnh cho MainActivity
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
gói mạng. học tập đơn giản. myheroapp ;
nhập android. nội dung. Giao diện hộp thoại ; nhập android. os. AsyncTask ; nhập android. os. Gói ; nhập android. hỗ trợ. v7. ứng dụng. AlertDialog ; nhập android. hỗ trợ. v7. ứng dụng. AppCompatActivity ; nhập android. văn bản. TextUtils ; nhập android. lượt xem. LayoutInflater ; nhập android. lượt xem. Xem ; nhập android. lượt xem. Nhóm xem ; nhập android. tiện ích. Bộ điều hợp mảng ; nhập android. tiện ích. Nút ; nhập android. tiện ích. Chỉnh sửa văn bản ; nhập android. tiện ích. Chế độ xem danh sách ; nhập android. tiện ích. Thanh tiến trình ; nhập android. tiện ích. Thanh xếp hạng ; nhập android. tiện ích. Trục quay ; nhập android. tiện ích. Chế độ xem văn bản ; nhập android. tiện ích. Nướng ;
nhập org. json. JSONArray ; nhập org. json. Ngoại lệ JSON ; nhập org. json. Đối tượng JSON ;
nhập java. sử dụng. Danh sách mảng ; nhập java. sử dụng. HashMap ; nhập java. sử dụng. Danh sách ;
nhập tĩnh android. lượt xem. Xem. ĐI ;
lớp công khai MainActivity mở rộng AppCompatActivity {
riêng tư tĩnh cuối cùng int CODE_GET_REQUEST = 1024; riêng tư tĩnh cuối cùng int CODE_POST_REQUEST = 1025;
EditText editTextHeroId , editTextName, editTextRealname; RatingBar ratingBar ; Người quay Đội người quay ; Thanh tiến trình thanh tiến trình ; ListView listView ; Nút buttonAddUpdate ;
Danh sách
boolean isUpdating = false;
@Override được bảo vệ vô hiệu hóa onCreate ( Bundle savedInstanceState) { siêu. onCreate ( savedInstanceState ); setContentView ( R. bố cục. hoạt_động_chính );
editTextHeroId = ( EditText) findViewById(R.id. editTextHeroId ); editTextName = ( EditText) findViewById(R.id. editTextName ); editTextTên thật = ( EditText) findViewById(R.id. editTextRealname ); Thanh xếp hạng = ( Thanh xếp hạng) findViewById(R.id. Thanh xếp hạng ); Nhóm người quay = ( Người quay) findViewById(R.id. spinnerTeamAffiliation );
buttonAddUpdate = ( Button) findViewById(R.id. buttonAddUpdate );
thanh tiến trình = ( Thanh tiến trình) findViewById(R.id. thanh tiến trình ); listView = ( ListView) findViewById(R.id. listViewHeroes );
Danh sách anh hùng = mới Danh sách mảng<>();
nútThêm cập nhật. setOnClickListener ( mới Chế độ xem. OnClickListener () { @Override công khai vô hiệu onClick ( View view) { nếu ( đang cập nhật ) { updateHero (); } khác { createHero (); } } }); readHeroes (); }
riêng tư void createHero () { Chuỗi tên = editTextName.getText (). toString (). cắt (); Chuỗi tên thật = editTextTên thật.getText (). toString (). cắt ();
int xếp hạng = ( int) ratingBar.getRating ();
Chuỗi nhóm = spinnerTeam.getSelectedItem (). toString ();
if ( TextUtils. isEmpty ( tên )) { editTextName. setError ( "Vui lòng nhập tên" ); editTextName. requestFocus (); return ; }
if ( TextUtils. isEmpty ( tên thật )) { editTextRealname. setError ( "Vui lòng nhập tên thật" ); editTextRealname. requestFocus (); return ; }
HashMap<Chuỗi , String> params = new HashMap<>(); thông số. đặt ( "tên" , name); thông số. đặt ( "tên thật" , realname); thông số. đặt ( "xếp hạng" , String.valueOf ( xếp hạng )); thông số. đặt ( "liên kết nhóm" , team);
PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_CREATE_HERO , tham số , CODE_POST_REQUEST); yêu cầu. thực thi (); }
riêng tư void readHeroes () { PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_READ_HEROES , null , CODE_GET_REQUEST); yêu cầu. thực thi (); }
riêng tư void updateHero () { Chuỗi id = editTextHeroId.getText (). toString (); Chuỗi tên = editTextName.getText (). toString (). cắt (); Chuỗi tên thật = editTextTên thật.getText (). toString (). cắt ();
int xếp hạng = ( int) ratingBar.getRating ();
Chuỗi nhóm = spinnerTeam.getSelectedItem (). toString ();
if ( TextUtils. isEmpty ( tên )) { editTextName. setError ( "Vui lòng nhập tên" ); editTextName. requestFocus (); return ; }
if ( TextUtils. isEmpty ( tên thật )) { editTextRealname. setError ( "Vui lòng nhập tên thật" ); editTextRealname. requestFocus (); return ; }
HashMap<Chuỗi , String> params = new HashMap<>(); thông số. đặt ( "id" , id); thông số. đặt ( "tên" , name); thông số. đặt ( "tên thật" , realname); thông số. đặt ( "xếp hạng" , String.valueOf ( xếp hạng )); thông số. đặt ( "liên kết nhóm" , team);
PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_UPDATE_HERO , tham số , CODE_POST_REQUEST); yêu cầu. thực thi ();
nútThêm cập nhật. setText ( "Add" );
editTextName. setText ( "" ); editTextTên thật. setText ( "" ); Thanh xếp hạng. setRating ( 0 ); Đội spinner. setSelection ( 0 );
đang cập nhật = false ; }
riêng tư void deleteHero ( int id) { PerformNetworkRequest yêu cầu = mới PerformNetworkRequest(Api.URL_DELETE_HERO + id , null, CODE_GET_REQUEST); yêu cầu. thực thi (); }
riêng tư void refreshHeroList ( JSONArray heroes) throws JSONException { Danh sách anh hùng. xóa ();
cho ( int i = 0; i < heroes.độ dài (); i ++) { JSONObject obj = anh hùng.getJSONObject ( i );
Danh sách anh hùng. thêm ( mới Anh hùng ( obj. getInt ( "id" ), obj. getString ( "tên" ), obj. getString ( "tên thật" ), obj. getInt ( "xếp hạng" ), obj. getString ( "liên kết nhóm" ) )); }
HeroAdapter bộ chuyển đổi = mới HeroAdapter(heroList); listView. setAdapter ( bộ chuyển đổi ); }
lớp riêng tư PerformNetworkRequest mở rộng AsyncTask<Void, Void, String> { Chuỗi url ; HashMap<Chuỗi , String> params; int mã yêu cầu ;
PerformNetworkRequest ( Chuỗi url, HashMap<String, String> params, int requestCode) { này. url = url ; này. tham số = tham số ; này. requestCode = requestCode ; }
@Ghi đè được bảo vệ vô hiệu onPreExecute () { siêu. onPreExecute (); thanh tiến trình. setVisibility ( Xem. Hiển thị ); }
@Ghi đè được bảo vệ vô hiệu onPostExecute ( String s) { siêu. onPostExecute ( s ); thanh tiến trình. setVisibility ( ĐI ); thử { Đối tượng JSON đối tượng = mới JSONObject(s); nếu (. đối tượng. getBoolean ( "lỗi" )) { Nướng. makeText ( getApplicationContext (), object.getString ( "nội dung" ), Toast.LENGTH_SHORT ). hiển thị (); refreshHeroList ( đối tượng. getJSONArray ( "anh hùng" )); } } catch ( JSONException e) { e. printStackTrace (); } }
@Ghi đè chuỗi được bảo vệ doInBackground ( Void... khoảng trống ) { RequestHandler requestHandler = new RequestHandler();
if ( requestCode == CODE_POST_REQUEST) return requestHandler. sendPostRequest ( url , tham số);
if ( requestCode == CODE_GET_REQUEST) return requestHandler. sendGetRequest ( url );
return null ; } }
lớp HeroAdapter mở rộng ArrayAdapter Danh sách
công khai HeroAdapter ( Danh sách siêu ( MainActivity. này , R. bố cục. layout_hero_list , heroList ); này. Danh sách anh hùng = Danh sách anh hùng ; }
@Ghi đè công khai Xem nhận được Xem ( int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); Xem listViewItem = tăng.thổi phồng ( R. bố cục. layout_hero_list , null , true);
Chế độ xem văn bản textViewName = listViewItem.findViewById ( R. id. textViewName );
Chế độ xem văn bản textViewUpdate = listViewItem.findViewById ( R. id. Cập nhật chế độ xem văn bản ); Chế độ xem văn bản textViewDelete = listViewItem.findViewById ( R. id. Xóa chế độ xem văn bản );
trận chung kết Anh hùng anh hùng = heroList.nhận ( vị trí );
textViewName. setText ( anh hùng. getName ());
textViewUpdate. setOnClickListener ( mới Chế độ xem. OnClickListener () { @Ghi đè công khai vô hiệu onClick ( View view) { đang cập nhật = true ; editTextHeroId. setText ( Chuỗi. valueOf ( anh hùng. getId ())); editTextName. setText ( anh hùng. getName ()); editTextRealname. setText ( anh hùng. getRealname ()); Thanh xếp hạng. setRating ( anh hùng. getRating ()); spinnerTeam. setSelection ((( ArrayAdapter buttonAddUpdate. setText ( "Cập nhật" ); } });
textViewDelete. setOnClickListener ( mới Chế độ xem. OnClickListener () { @Ghi đè công khai vô hiệu onClick ( View view) {
AlertDialog. Trình xây dựng trình xây dựng = mới AlertDialog . .Trình tạo ( MainActivity. này );
người xây dựng. setTitle ( "Xóa " + hero.getName ()) . setMessage ( "Bạn có chắc chắn muốn xóa nó không?" ) . setPositiveButton ( android. R. chuỗi. có , mới Giao diện Hộp thoại. OnClickListener () { công khai vô hiệu onClick ( DialogInterface dialog, int which) { xóa Anh hùng ( anh hùng. getId ()); } }) . setNegativeButton ( android. R. chuỗi. không , mới Giao diện hộp thoại. OnClickListener () { công khai vô hiệu onClick ( DialogInterface dialog, int which) {
} }) . setIcon ( android. R. có thể vẽ được. ic_dialog_alert ) . hiển thị ();
} });
return listViewItem ; } } }
Hướng dẫn Android MySQL – Tải xuống mã nguồn
Mã nguồn hướng dẫn Android MySQL Vậy đó là tất cả cho Hướng dẫn Android MySQL này các bạn ạ. Hoạt động CRUD là cần thiết trong hầu hết mọi ứng dụng, vì vậy đây là một điều rất quan trọng. Nếu bạn gặp bất kỳ sự nhầm lẫn hoặc thắc mắc nào liên quan đến hướng dẫn Android MySQL này, đừng ngần ngại hỏi ý kiến. Và nếu bạn thích bài đăng thì HÃY CHIA SẺ NÓ . Cảm ơn bạn 🙂 Belal Khan Xin chào, tên tôi là Belal Khan và tôi là Chuyên gia phát triển Google (GDE) cho Android. Niềm đam mê giảng dạy đã khiến tôi tạo blog này. Nếu bạn là Nhà phát triển Android hoặc bạn đang tìm hiểu về Phát triển Android, thì tôi có thể giúp bạn rất nhiều với Mã hóa đơn giản Làm cách nào để thêm MySQL trong Android Studio?Đây là khi người dùng đã đăng ký. . Bước 1. Tạo cơ sở dữ liệu mySQL trong phpMyAdmin. . Bước 2. Tạo 3 file php. . Bước 3. Các thành phần nên có trong Android Studio. . Bước 4. Thiết kế hoạt động_main. xml. . Bước 5. Tạo một lớp có tên Design the BackgroundWorker. java. . Bước 6. Viết mã trong MainActivity. java Tôi nên sử dụng cơ sở dữ liệu nào cho Android studio?Hầu hết các ứng dụng Android cần lưu trữ dữ liệu ở đâu đó và cách phổ biến nhất để lưu trữ dữ liệu trên Android là sử dụng Cơ sở dữ liệu SQLite . Chúng tôi đã phát hành một khóa học đầy đủ trên freeCodeCamp. org Kênh YouTube tất cả về cách sử dụng Cơ sở dữ liệu SQLite với Android Studio.
MySQL có thể được sử dụng cho ứng dụng di động không?Bạn có thể chọn cơ sở dữ liệu tốt nhất cho ứng dụng dành cho thiết bị di động của mình dựa trên yêu cầu của bạn. MySQL. Cơ sở dữ liệu SQL nguồn mở, đa luồng và dễ sử dụng . PostgreSQL. Cơ sở dữ liệu quan hệ dựa trên đối tượng mã nguồn mở mạnh mẽ có khả năng tùy biến cao.
Android Studio có thể kết nối với cơ sở dữ liệu không?Quy trình từng bước . Bước 1. Mở dự án studio Android có kết nối cơ sở dữ liệu SQLite. . Bước 2. Kết nối một thiết bị. . Bước 3. Tìm kiếm Device File Explorer trong studio Android Bước 4. Tìm kiếm tên gói ứng dụng. . Bước 5. Tải xuống cơ sở dữ liệu. . Bước 6. Tải xuống trình duyệt SQLite. . Bước 7. Tìm kiếm tệp cơ sở dữ liệu đã lưu |