Android 3.3 API 18
你好,
我正在开发我的第一个Android应用程序。该应用程序将需要连接到在线数据库以存储用户数据。
我正在寻找一个包含MySQL数据库的云存储。然而,我的应用程序可以直接连接到这个MySQL数据库并从中推送和拉取数据吗?还是需要做其他的事情?
非常感谢任何建议,
Android 3.3 API 18
你好,
我正在开发我的第一个Android应用程序。该应用程序将需要连接到在线数据库以存储用户数据。
我正在寻找一个包含MySQL数据库的云存储。然而,我的应用程序可以直接连接到这个MySQL数据库并从中推送和拉取数据吗?还是需要做其他的事情?
非常感谢任何建议,
是的,你可以这样做。
你需要的材料:
1.首先,在你的清单文件中设置 Internet 权限。
<uses-permission android:name="android.permission.INTERNET" />
2. 制作一个类从服务器发出HTTPRequest(我使用JSON解析来获取值)
例如:
public class JSONfunctions {
public static JSONObject getJSONfromURL(String url) {
InputStream is = null;
String result = "";
JSONObject jArray = null;
// Download JSON data from URL
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
// Convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
try {
jArray = new JSONObject(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return jArray;
}
}
3. 在你的 MainActivity
中创建一个 JsonFunctions
类的对象,并将从中获取数据的 URL 作为参数传递。
例如:
JSONObject jsonobject;
jsonobject = JSONfunctions.getJSONfromURL("http://YOUR_DATABASE_URL");
4.最后读取jsontags并将值存储在arraylist中,如果需要,稍后在listview中显示它。
如果您遇到任何问题,可以参考这篇博客,他提供了优秀的Android教程:AndroidHive。
由于我之前写的答案已经过时,现在Api 23中已删除了HttpClient
、HttpPost
和HttpEntity
。 您可以使用以下代码在build.gradle(应用程序级别)中继续在项目中使用 org.apache.http
。
android {
useLibrary 'org.apache.http.legacy'
signingConfigs {}
buildTypes {}
}
或者您可以使用下面的代码 HttpURLConnection
从服务器获取响应
public String getJSON(String url, int timeout) {
HttpURLConnection c = null;
try {
URL u = new URL(url);
c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Content-length", "0");
c.setUseCaches(false);
c.setAllowUserInteraction(false);
c.setConnectTimeout(timeout);
c.setReadTimeout(timeout);
c.connect();
int status = c.getResponseCode();
switch (status) {
case 200:
case 201:
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
return sb.toString();
}
} catch (MalformedURLException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} finally {
if (c != null) {
try {
c.disconnect();
} catch (Exception ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
}
return null;
或者您可以使用第三方库,如Volley
,Retrofit
来调用WebService API并获取响应,稍后使用FasterXML-jackson
,google-gson
进行解析。java.net
类,这在技术上仍然是可能的。虽然比直接添加JDBC依赖项更复杂,但答案肯定不是“不行”。 - SOFe你想做的事情是个坏主意。这需要在应用程序中嵌入你的用户名和密码。这是一个非常糟糕的主意,因为可能会通过逆向工程你的APK并获取到连接公共mysql服务器的用户名和密码,该服务器可能包含敏感用户数据。
我建议创建一个Web服务来作为mysql服务器的代理。我假设用户需要登录,因此可以使用他们的用户名/密码来认证Web服务。
步骤1:在您的服务器上创建一个网络服务
步骤2:使您的应用程序调用网络服务并接收结果集
当然可以连接到在线的MySql数据库,为此您需要创建一个Web服务。这个Web服务将提供您访问MySql数据库的权限,然后您就可以轻松地推拉数据到MySql数据库中。PHP是创建Web服务的良好选择,因为它易于实现。祝你好运...
这其实非常简单。但是你无法直接实现它。你需要选择一种服务器端技术。在这方面,你可以使用任何东西。这就是我们所谓的RESTful API或SOAP API。取决于你选择什么。 我已经做过许多包含两者的项目。我更喜欢REST。 所以会发生什么,你将在你的Web服务器上拥有一些脚本,并知道它们的URL。例如,我们需要进行用户注册。为此,我们有
mydomain.com/v1/userregister.php
现在从Android端,您将向上述URL发送一个HTTP请求。上述URL将处理用户注册,并给您一个响应,告诉您操作是否成功。