Android 3.3 API 18
Run Code Online (Sandbox Code Playgroud)
你好,
我正在使用android开发我的第一个App.应用程序必须连接到在线数据库以存储用户数据.
我正在寻找包含MySQL数据库的云存储.但是,我的应用程序可以直接连接到此MySQL数据库并从中推送和提取数据吗?或者还有其他我需要做的事情吗?
非常感谢任何建议,
Jef*_*zar 73
是的,你可以这样做.
您需要的材料:
1.首先在清单文件中设置Internet权限
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
2.创建一个类来从服务器发出HTTPRequest(我使用json parisng来获取值)
例如:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
3.在MainActivityMake中创建类的对象,并将JsonFunctionsurl作为参数从您想要获取数据的位置传递
例如:
JSONObject jsonobject;
Run Code Online (Sandbox Code Playgroud)
jsonobject = JSONfunctions.getJSONfromURL("http://YOUR_DATABASE_URL");
4.然后最后阅读jsontags并将值存储在arraylist中,然后如果你想要在listview中显示它
如果你有任何问题,你可以按照这个博客,他提供优秀的Android教程AndroidHive
由于上述答案我写了很长回来,现在HttpClient,HttpPost,HttpEntity已在阿比23.删除您可以使用在的build.gradle(应用级),下面的代码仍然继续使用org.apache.http在您的项目.
android {
useLibrary 'org.apache.http.legacy'
signingConfigs {}
buildTypes {}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用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;
Run Code Online (Sandbox Code Playgroud)
}
或者您可以使用第三方库一样Volley,Retrofit调用web服务的API,并得到回应,后来用解析它FasterXML-jackson,google-gson.
你想做的是一个坏主意.它需要您在应用程序中嵌入您的用户名和密码.这是一个非常糟糕的主意,因为它可能可以对您的APK进行逆向工程,并获取可能包含敏感用户数据的这个面向公众的mysql服务器的用户名和密码.
我建议创建一个Web服务作为mysql服务器的代理.我假设用户需要登录,因此您可以使用他们的用户名/密码对Web服务进行身份验证.
| 归档时间: |
|
| 查看次数: |
132117 次 |
| 最近记录: |