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

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

  • C xử lý Bản ghi -> Trong cơ sở dữ liệu, chúng tôi chèn bản ghi.
  • R reading Bản ghi đã lưu trữ -> Không có ích gì khi lưu dữ liệu khi chúng tôi không thể đọc lại 😛 (LOL). Vì vậy, thao tác thứ hai là đọc lại dữ liệu được lưu trữ.
  • U pdating Bản ghi được lưu trữ -> Chúng tôi cũng có thể cần cập nhật dữ liệu hiện có. Vì vậy, hoạt động thứ ba là cập nhật.
  • D xóa Bản ghi -> Cuối cùng, chúng tôi cũng có thể cần xóa dữ liệu hiện có khỏi cơ sở dữ liệu.

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 Web

Bướ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

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

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ệu

Rõ 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

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

  • Vì vậy, hãy mở localhost/phpmyadmin và chạy truy vấn sau để tạo bảng trên

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 PHP

Bâ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

  • Vì vậy, bên trong htdocs (c. /xampp/htdocs) tạo một thư mục mới (Bạn cũng có thể sử dụng IDE như PHP Storm để tạo dự án nhưng hãy nhớ tạo dự án bên trong c. /xampp/chỉ htdocs).  
  • Tôi đã đặt tên HeroApi cho dự án của mình. Bạn có thể đặt tên bất kỳ. Nhưng tôi sẽ nói hãy đặt cùng tên nếu không bạn có thể dẫn đến một số lỗi sau bài đăng nếu bạn là người mới.
  • Bên trong dự án, tạo thêm hai thư mục có tên gồm Api. You can see the below screenshot for the directory structure that I am using. (I am using Sublime Text for coding server part).

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

  • Bạn thấy chúng tôi có bốn tệp php (3 bên trong bao gồm và 1 bên trong v1) . Vì vậy, bạn cũng tạo các tệp này.

Cấu trúc dự án

  • Vì vậy, chúng tôi có những điều sau đây trong dự án PHP của chúng tôi
    • bao gồm
      • Hằng số. php. Trong tệp này, chúng tôi sẽ xác định tất cả các hằng số cần thiết e. g. , tên cơ sở dữ liệu, tên người dùng, mật khẩu, v.v.
      • DbConnect. php. Điền này sẽ chứa một lớp nơi chúng tôi sẽ kết nối với cơ sở dữ liệu MySQL của chúng tôi.
      • DbOperation. php.  Thao tác CRUD thực tế được thực hiện bên trong tệp này.
    • v1
      • Api. php.  Đây là API của chúng tôi, chúng tôi sẽ chỉ gửi yêu cầu tới tệp này từ phía Android. Và tệp này sẽ xử lý tất cả các lệnh gọi API.

Xác định hằng số

  • Đầu tiên hãy vào bên trong tệp Constants. php và viết đoạn mã sau

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

  • Bây giờ bên trong DbConnect. php viết đoạn mã sau. Tôi đã giải thích mã bằng nhận xé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

 

/*

* Đượ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

  • Bây giờ chúng ta sẽ thực hiện thao tác CRUD bên trong DbOperation. tập tin php

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

  • Bây giờ đến phần chính, xử lý lệnh gọi API. Vì vậy, hãy đến bên trong Api. php bên trong thư mục v1

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 );

 

  • Bây giờ hãy kiểm tra các API

Kiểm tra các lệnh gọi API

  • Để kiểm tra các cuộc gọi API ở đây tôi đang sử dụng POSTMAN. Nó là ứng dụng API REST dành cho Google Chrome
Tạo hoạt động

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

Đọc hoạt động

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

Hoạt động cập nhật

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

Thao tác xóa

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

Bạ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ảng bên dưới hiển thị các URL API của chúng tôi với Tham số và Phương thức. Hãy nhớ sử dụng localhost bên android sẽ không hoạt động. Bạn cần tìm IP của mình. Tôi có IP của mình trong bảng bên dưới, nhưng trong trường hợp của bạn, bạn cần tìm IP của mình. Vì vậy, nếu bạn đang sử dụng windows, bạn có thể sử dụng lệnh ipconfig để tìm IP và đối với MAC hoặc Linux, hãy sử dụng ifconfig . Để biết thêm chi tiết bạn có thể truy cập. . For more details you can visit .

 

  • BƯU KIỆN. http. //192. 168. 101. 1/HeroApi/v1/Api. php?apical=createhero
  • ĐƯỢC. http. //192. 168. 101. 1/HeroApi/v1/Api. php?apical=getheroes
  • BƯU KIỆN. http. //192. 168. 101. 1/HeroApi/v1/Api. php?apical=updatehero
  • ĐƯỢC. http. //192. 168. 101. 1/HeroApi/v1/Api. php?apical=deletehero&id=idvalue

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 MySQL

Chú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 Dự án Android Studio mới. Ở đây tôi đã tạo một dự án tên là MyHeroApp
  • Khi dự án của bạn được tải bên trong gói, chúng tôi sẽ tạo tất cả các lớp trợ giúp cần thiết cho dự án của bạn

Tạo các lớp trợ giúp

Lớp để lưu trữ URL API

  • Đầu tiên tạo một lớp có tên là Api. java và viết đoạn mã sau

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

  • Chúng tôi cũng cần một lớp mẫu cho Anh hùng của chúng tôi. Vì vậy, hãy tạo một lớp có tên Anh hùng. java và viết đoạn mã sau. Nó sẽ chỉ có các thuộc tính, hàm tạo và getters

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. = 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 ;

     }

 

    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

  • Chúng tôi cần gửi yêu cầu GET và POST tới các URL API của mình và để làm điều này, tôi đang tạo một lớp mới sẽ thực hiện các tác vụ này. Vì vậy, hãy tạo một lớp mới có tên RequestHandler. java và viết đoạn mã sau

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

  • Vì chúng tôi cần thực hiện yêu cầu mạng từ Ứng dụng của mình, chúng tôi cần xác định quyền truy cập internet cho việc này. Và bởi vì chúng tôi đang làm việc với localhost nên các API của chúng tôi không được bảo mật. e. chúng tôi có các URL HTTP chứ không phải HTTPS cho các API của chúng tôi
  • Và theo mặc định, ứng dụng của bạn bị hạn chế giao tiếp với các URL không phải HTTPS (Vì lý do bảo mật). Vì vậy, bạn cần xác định rõ ràng rằng ứng dụng của bạn sẽ được phép giao tiếp với các URL HTTP. Và để làm được điều này, bạn cần thêm usesCleartextTraffic=”true”  bên trong thẻ mở ứng dụng của mình. (Xem đoạn mã dưới đây là AndroidManifest. xml cho dự án của tôi. ).

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 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

  • Hình ảnh dưới đây cho thấy ứng dụng cuối cùng của chúng ta sẽ trông như thế nào
Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?
Giao diện người dùng ứng dụng
  • Vì vậy, chúng ta cần thiết kế những điều đã đề cập ở trên. Tôi đã thiết kế Activity_main. xml để bạn có thể trực tiếp sử dụng đoạn mã dưới đây

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. = "@+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. = "@+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. = "@+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. = "@+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. = "@+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>

 

  • Đối với công cụ quay vòng, tôi đã sử dụng các mục nhập tĩnh bằng cách sử dụng mảng xml. Vì vậy, bạn cũng cần tạo mảng này. Đối với điều này, hãy vào bên trong giá trị -> chuỗi. xml

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à phần Giao diện người dùng
  • Bây giờ, hãy thực hiện các thao tác CRUD trong cơ sở dữ liệu MySQL của chúng tôi

Lớp thực hiện yêu cầu mạng

  • Vấn đề là chúng ta không thể trực tiếp thực hiện yêu cầu mạng trong luồng chính của ứng dụng. Vì vậy, đối với điều này, chúng tôi cần một AsyncTask để thực hiện tác vụ trong một chuỗi riêng biệt. Do đó, chúng tôi sẽ tạo một lớp bên trong 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

 

    //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

  • Bây giờ, hãy lưu một anh hùng mới vào cơ sở dữ liệu của chúng tôi. Trước tiên, chúng tôi sẽ xác định tất cả các chế độ xem. Và chúng tôi sẽ đính kèm một clicklistener vào nút và bên trong sự kiện nhấp chuột, chúng tôi sẽ gọi phương thức để tạo một bản ghi mới trong 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

 

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 Danh sách anh hùng ;

 

    //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();

     }

 

  • Bây giờ chúng ta cần tạo phương thức createHero() .

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 ();

     }

 

  • Bây giờ hãy chạy ứng dụng và thử thêm một anh hùng mới
Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?
Android MySQL – Tạo thao tác
  • Nó hoạt động tốt, bạn cũng có thể kiểm tra cơ sở dữ liệu. Bây giờ hãy chuyển sang thao tác đọc

Đọc hoạt động

  • Chúng tôi sẽ hiển thị tất cả các anh hùng từ cơ sở dữ liệu trong ListView, ListView cũng có Nút Cập nhật và Xóa
  • Vì vậy, trước tiên, chúng tôi sẽ tạo Bố cục tùy chỉnh cho ListView của chúng tôi

Bố cục danh sách

  • Tạo tệp tài nguyên bố cục có tên layout_hero_list. 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

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. = "@+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. = "@+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

  • Tạo thêm một lớp bên trong bên trong lớp MainActivity. Chúng tôi sẽ đặt tên nó là HeroAdapter

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 Danh sách anh hùng ;

 

        

        //hàm tạo để lấy danh sách

        công khai HeroAdapter ( Danh sách heroList) {

            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) spinnerTeam.getAdapter ()). getPosition ( anh hùng. getTeamaffiliation ()));

                    

                    //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. , 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

  • Tạo một phương thức có tên readHeroes()

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 ();

     }

 

  • Bây giờ chúng ta cần thêm một phương pháp để làm mới Danh sách anh hùng. Vì vậy, hãy tạo một phương thức có tên refreshHeroList()

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 );

     }

 

  • Bây giờ cũng bỏ ghi chú phương thức đã nhận xét bên trong lớp PeformNetworkRequest và phương thức onCreate(). Bạn cần bỏ ghi chú readHeroes() bên trong onCreate()refreshHeroList() bên trong lớp PerformanceNetworkRequest.  
  • Bây giờ bạn có thể thử chạy ứng dụng
Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?
Android MySQL – Thao tác đọc
  • Bạn có thể thấy nó cũng hoạt động tốt. Bây giờ hãy thực hiện thao tác CẬP NHẬT

Hoạt động cập nhật

  • Để cập nhật, chúng tôi sẽ tạo một phương thức mới có tên updateHero()

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 ;

     }

 

  • Bây giờ chỉ cần bỏ ghi chú phương thức updateHero() bên trong trình xử lý nhấp chuột của buttonAddUpdate.
  • Và bây giờ chúng ta có thể thử cập nhật một bản ghi
Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?
Android MySQL – Thao tác cập nhật
  • Vì vậy, bản cập nhật cũng hoạt động hoàn toàn tốt. Bây giờ hãy chuyển sang thao tác cuối cùng là xóa

Thao tác xóa

  • Để xóa chúng ta cũng cần một phương thức mới. Vì vậy, hãy tạo một phương thức có tên là deleteHero()

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 ();

     }

 

  • Bây giờ bỏ ghi chú phương thức deleteHero() bên trong lớp HeroAdapter.
  • Và hãy kiểm tra thao tác xóa nữa
Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?
Android MySQL – Thao tác xóa
  • Vì vậy, nó cũng hoạt động tốt. Và chúng tôi đã thực hiện tất cả các hoạt động CRUD cơ bản

Mã hoàn chỉnh cho MainActivity

  • Nếu bạn có một số nhầm lẫn khi làm theo các bước trên thì đây là mã hoàn chỉnh cho 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

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 Danh sách anh hùng ;

 

    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 Danh sách anh hùng ;

 

        công khai HeroAdapter ( Danh sách heroList) {

            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) spinnerTeam.getAdapter ()). getPosition ( anh hùng. getTeamaffiliation ()));

                    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. , 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 ;

         }

     }

}

 

  • Vì vậy, sau khi thực hiện đúng từng bước, ứng dụng của bạn sẽ hoạt động như hình bên dưới
Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?
Hướng dẫn Android MySQL

Hướng dẫn Android MySQL – Tải xuống mã nguồn

  • Nếu bạn vẫn gặp rắc rối, bạn có thể lấy mã nguồn của tôi từ bên dưới. Nó có mọi thứ, tập lệnh phía máy chủ, tệp cơ sở dữ liệu và dự án Android

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 🙂 

Tôi có thể sử dụng MySQL trong Android Studio không?
Tôi có thể sử dụng MySQL trong Android Studio không?

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