接下来我将详细讲解“Android实现与Apache Tomcat服务器数据交互(MySql数据库)”的完整攻略。
1. 确定需要的框架和工具
在实现Android与Apache Tomcat服务器数据交互(MySql数据库)之前,你需要明确需要的框架和工具。例如:
- Android Studio:用于开发Android应用程序;
- Apache Tomcat:Web服务器,用于提供对Java Servlet和JSP页面的支持;
- MySQL:用于存储和管理数据的关系型数据库管理系统;
- JDBC驱动程序:用于在Java应用程序中连接MySQL数据库的驱动程序。
2. 创建Web应用程序
在Apache Tomcat中创建一个新的Web应用程序。你可以根据自己的需求选择合适的编程语言和Web框架。例如,使用Java和Spring框架来实现RESTful API。
3. 配置Android项目
要在Android应用程序中使用Web服务,必须声明Internet权限。在您的Android项目的清单文件(AndroidManifest.xml)中添加以下行:
<uses-permission android:name="android.permission.INTERNET" />
在您的build.gradle文件中添加以下行:
dependencies {
implementation 'com.android.volley:volley:1.1.1'
}
提示: 建议使用Volley网络请求框架来发送HTTP请求并接收响应数据。
4. 实现HTTP请求
使用Volley网络请求框架来实现HTTP请求。你可以向Web服务器发送HTTP GET或POST请求,并将响应数据作为String对象或JSON对象接收。以下是一个示例:
String url = "http://localhost:8080/api/users";
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// 处理响应数据
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 处理网络错误
}
});
queue.add(stringRequest);
5. 处理响应数据
当接收到来自Web服务器的响应数据时,你可以解析它并将其显示在Android应用程序中。以下是一个示例:
JSONObject responseJsonObject = new JSONObject(response);
String name = responseJsonObject.getString("name");
int age = responseJsonObject.getInt("age");
TextView nameTextView = findViewById(R.id.name);
nameTextView.setText(name);
TextView ageTextView = findViewById(R.id.age);
ageTextView.setText(String.valueOf(age));
示例1:Android应用程序与Tomcat服务器连接MySQL数据库,并显示查询结果
下面是一个简单的示例,说明如何使用Android应用程序连接MySql数据库,并显示查询结果。
在Tomcat中使用Java EE编写一个简单的RESTful API:
@Path("users")
public class UserResource {
@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public User getUser(@PathParam("id") int id) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM users WHERE id=" + id);
if (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
}
创建一个名为“com.example.mysqltest”的Android应用程序,并在清单文件(AndroidManifest.xml)中添加Internet权限。
在MainActivity.java中添加以下代码:
public class MainActivity extends AppCompatActivity {
private EditText idEditText;
private TextView nameTextView;
private TextView ageTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idEditText = findViewById(R.id.id_edit_text);
nameTextView = findViewById(R.id.name_text_view);
ageTextView = findViewById(R.id.age_text_view);
Button queryButton = findViewById(R.id.query_button);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int id = Integer.parseInt(idEditText.getText().toString());
String url = "http://localhost:8080/api/users/" + id;
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String name = response.getString("name");
int age = response.getInt("age");
nameTextView.setText(name);
ageTextView.setText(String.valueOf(age));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
queue.add(jsonObjectRequest);
}
});
}
}
在activity_main.xml中添加以下代码:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container">
<EditText
android:id="@+id/id_edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:hint="id"/>
<Button
android:id="@+id/query_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/id_edit_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="Query"/>
<TextView
android:id="@+id/name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/query_button"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text=""/>
<TextView
android:id="@+id/age_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/name_text_view"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text=""/>
</RelativeLayout>
在Android Studio中运行应用程序。当用户点击“Query”按钮时,Android应用程序将发送HTTP请求到Tomcat服务器,并返回JSON对象。该应用程序将JSON对象解析为字符串,并将字符串显示在TextView中。
示例2:Android应用程序向Tomcat服务器插入新的记录
下面是一个简单的示例,说明如何使用Android应用程序将数据插入MySql数据库中。
在Tomcat中使用Java EE编写一个简单的RESTful API:
@Path("users")
public class UserResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void createUser(User user) {
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
stmt = conn.prepareStatement("INSERT INTO users(name,age) VALUES(?,?)");
stmt.setString(1, user.getName());
stmt.setInt(2, user.getAge());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
创建一个名为“com.example.mysqltest”的Android应用程序,并在清单文件(AndroidManifest.xml)中添加Internet权限。
在MainActivity.java中添加以下代码:
public class MainActivity extends AppCompatActivity {
private EditText nameEditText;
private EditText ageEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameEditText = findViewById(R.id.name_edit_text);
ageEditText = findViewById(R.id.age_edit_text);
Button insertButton = findViewById(R.id.insert_button);
insertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = nameEditText.getText().toString();
int age = Integer.parseInt(ageEditText.getText().toString());
String url = "http://localhost:8080/api/users";
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
User user = new User();
user.setId(0);
user.setName(name);
user.setAge(age);
Gson gson = new Gson();
String json = gson.toJson(user);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, json,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// 处理响应数据
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
queue.add(jsonObjectRequest);
}
});
}
}
在activity_main.xml中添加以下代码:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container">
<EditText
android:id="@+id/name_edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:hint="name"/>
<EditText
android:id="@+id/age_edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/name_edit_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:hint="age"/>
<Button
android:id="@+id/insert_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/age_edit_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="Insert"/>
</RelativeLayout>
在Android Studio中运行应用程序。当用户输入“name”和“age”并点击“Insert”按钮时,Android应用程序将发送HTTP POST请求到Tomcat服务器,并将新的记录插入到MySql数据库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android实现与Apache Tomcat服务器数据交互(MySql数据库) - Python技术站