Android应用程序可以直接连接到在线mysql数据库

ant*_*009 47 mysql android

Android 3.3 API 18
Run Code Online (Sandbox Code Playgroud)

你好,

我正在使用android开发我的第一个App.应用程序必须连接到在线数据库以存储用户数据.

我正在寻找包含MySQL数据库的云存储.但是,我的应用程序可以直接连接到此MySQL数据库并从中推送和提取数据吗?或者还有其他我需要做的事情吗?

非常感谢任何建议,

Jef*_*zar 73

是的,你可以这样做.

您需要的材料:

  1. 网络服务器
  2. 存储在Web服务器中的数据库
  3. 还有一点安卓知识:)
  4. Web服务(json,Xml ......等),无论你喜欢什么

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.

  • 即使有一个解决方案,"Android App可以直接连接到在线mysql数据库"的正确答案是否定的. (6认同)
  • 谢谢你的解决方案.只是想知道你是否可以推荐任何免费的托管网站,我的应用程序可以连接到MySQL数据库.作为这个学术界我没有太大的带宽空间.谢谢. (5认同)

Ran*_*ndy 9

你想做的是一个坏主意.它需要您在应用程序中嵌入您的用户名和密码.这是一个非常糟糕的主意,因为它可能可以对您的APK进行逆向工程,并获取可能包含敏感用户数据的这个面向公众的mysql服务器的用户名和密码.

我建议创建一个Web服务作为mysql服务器的代理.我假设用户需要登录,因此您可以使用他们的用户名/密码对Web服务进行身份验证.


小智 8

你可以使用PHP,JSP,ASP或任何其他服务器端脚本连接mysql数据库,并返回你可以解析它的JSON数据到你的Android应用程序这个链接怎么做


Hus*_*ri' 5

第 1 步:在您的服务器上创建 Web 服务

第 2 步:让您的应用程序调用 Web 服务并接收结果集