Android客户端怎么与服务器数据库连接?

Android客户端怎么与服务器数据库连接?,第1张

不能与数据库连接的

Android客户端不能直接与服务器数据库连接。数据库是需要非常大的内存,安装之后有好几G,连接数据库要有一个像SQLServer里的webservice,这样的一个桥梁来间接访问。就是在服务器运行一个服务端程序,该服务端程序通过接收来自android客户端的指令,对数据库进行操作。

客户端的http请求可以通过 HttpClient类实现,在anddroid 40之后,客户端的网络请求已经不被允许在主线程中运行,所以还需注意另开启一个子线程进行网络请求。

扩展资料:

Android安全权限机制:

Android默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。

下载一款Android应用通常会要求如下的权限:拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、

还有对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄等。

——Android

(1)安全性是https的不足,这是因为开始设计的时候没有考虑这个方面的需要;但是你可以使用:https协议,加密的,不会出现泄密问题 (2)登录状态是服务器保存的信息,客户端想服务器发送是很正常的事情;处理方法也很简单,就是生成一个ID,由客户端保存,请求服务时将id一并发送上去(https和http都是这样实现的),至于唯一性和保密性,你可以根据你的业务信息,按照特定的规则来生成,服务器可以在收到id后使用特定的方法验证是不是合法(生成规则当然可以是私密的); (3)其实使用任何协议都可以满足安全问题,关键是你的数据如何处理,你可以在你的应用客户端中将通信数据加密后生成bcd码发送服务器;加密密码可以采用动态的;也就是根据需要同服务器进行协商自动生成,也可以在验证用户时分配。 在使用C/S方式处理的时候,因为存在客户端,很多功能都可以进行自行控制,很方便了,完全可以自己制定一些通信协议(所谓的协议本质上就是发送、接收和理解通信数据的特定的格式),那就更加保密了。

android,遇到从android客户端向服务器端发送汉字乱码问题。采用URLConnection的GET方式,在客户端和服

  务端都需要进行转码,而采用POST方式则不需要转码。具体方法如下:

  

用URLConnection从android发送数据有两种方式:

  第一种方式:采用get方式传值

    (1)客户端代码:

        URL url = new URL(mUrl);

        URLConnection urlConnection = urlopenConnection();

       InputStream is = urlConnectiongetInputStream();

      ByteArrayBuffer baf = new ByteArrayBuffer(50);

        int current = 0;

         while ((current = isread()) != -1) {

          bafappend((byte) current);

         }

         requestInfo = new String(baftoByteArray(), "UTF-8")trim();

      isclose();

 

        对汉字进行处理:

          URLEncoderencode(URLEncoderencode(channelName, "UTF-8"), "UTF-8")

  (2)服务器端接收字段:

       URLDecoderdecode(URLDecoderdecode(requestgetParameter("nickname"), "UTF-8"), "UTF-8")

 

  第二种方式:采用Post方式:

      客户端代码:

        public String sendRemoteRequest(String path,String param){

              Logi("lisheng", paramtoString());

              Logi("lisheng", path);

               String strRes="";

               OutputStream os = null;

             DataOutputStream dos = null;

             InputStream is = null;

            BufferedReader br = null;

            try {

                 URL url = new URL(path);

                  URLConnection urlConn = urlopenConnection();

                 urlConnsetDoInput(true);

                  urlConnsetDoOutput(true);

                 os = urlConngetOutputStream();

                dos = new DataOutputStream(os);

                doswrite(paramgetBytes());

                 dosflush();

                 dosclose();

                osclose();

                 is = urlConngetInputStream();

                  br = new BufferedReader(new InputStreamReader(is,"UTF-8"));

                 for (String strLine = ""; (strLine = brreadLine()) != null;)

                     strRes = (new StringBuilder(StringvalueOf(strRes)))append(strLine)toString();

                isclose();

               } catch (MalformedURLException e) {

                    eprintStackTrace();

               } catch (UnsupportedEncodingException e) {

                  eprintStackTrace();

               } catch (IOException e) {

                     eprintStackTrace();

               }

                 return strRes;

               }

         参数里直接写汉字

   

   服务器端代码:

 

 requestsetCharacterEncoding("UTF-8");

 requestgetParameter("nickname")

   

 即可得到参数为汉字的值,不需要转码。

  一:基于Http协议获取数据方法。二:基于SAOP协议获取数据方法,

  这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。

  那么,接下来我们便开始这一路程:

  首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目,技术配备为:android+SSH。当然,篇幅有限,我这里就直接用Strtus2而已。

  服务器端:新建WebProject ,选择Java ee 50

  为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去):

  1: xwork-core-2211jar

  2: struts2-core-2211jar

  3: commons-logging-104jar

  4: freemarker-2316jar

  5: ognl-30jar

  6: javassist-37gajar

  7:commons-ileuploadjar

  8:commons-iojar

  9:json-lib-21-jdk15jar 处理JSON格式数据要使用到

  10:struts2-json-plugin-2211jar 基于struts2的json插件

  以上的jar包,需要放在WebRoot/WEB-INF/lib目录下

  然后在webxml文件中敲下:

  View Code

  <xml version="10" encoding="UTF-8">

  <web-app version="25"

  xmlns="http://javasuncom/xml/ns/javaee"

  xmlns:xsi="http://wwww3org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://javasuncom/xml/ns/javaee

  http://javasuncom/xml/ns/javaee/web-app_2_5xsd">

  <!-- 定义Struts2的核心控制器:FilterDispatcher -->

  <filter>

  <!-- 定义核心Filter的名称 -->

  <filter-name>struts2</filter-name>

  <!-- 定义Filter的实现类 -->

  <filter-class>orgapachestruts2dispatcherFilterDispatcher</filter-class>

  </filter>

  <filter-mapping>

  <filter-name>struts2</filter-name>

  <url-pattern>/</url-pattern>

  </filter-mapping>

  <welcome-file-list>

  <welcome-file>indexjsp</welcome-file>

  </welcome-file-list>

  </web-app>

  然后编写strutsxml文件,并放在WebRoot/WEB-INF/lib目录下:如下代码:

  View Code

  <xml version="10" encoding="UTF-8">

  <!DOCTYPE struts PUBLIC

  "-//Apache Software Foundation//DTD Struts Configuration 20//EN"

  "http://strutsapacheorg/dtds/struts-20dtd">

  <struts>

  <!-- setting encoding,DynamicMethod,language

  <constant name="strutscustomi18nresources" value="messageResource"></constant>

  -->

  <constant name="strutsi18nencoding" value="UTF-8"></constant>

  <constant name="strutsenableDynamicMethodInvocation" value="true"></constant>

  <!-- add package here extends="struts-default"-->

  <package name="dongzi" extends="json-default"> <!--需要将struts-default改为json-default-->

  <!-- setting action -->

  <action name="login" class="comdongziactionloginAction" method="login">

  <result type="json"></result> <!--返回值类型设置为json,不设置返回页面-->

  </action>

  </package>

  </struts>

  配置好后,我们再根据<action>标签内容来编写action。方法为method对应的login,类名为loginAction,

  注意:包继承为:json-default ,输出结果类型为json

  如下:

  View Code

  public class loginAction extends ActionSupport implements

  ServletRequestAware,ServletResponseAware {

  /

  

  /

  private static final long serialVersionUID = 1L;

  HttpServletRequest request;

  HttpServletResponse response;

  public void setServletRequest(HttpServletRequest request) {

  thisrequest=request;

  }

  public void setServletResponse(HttpServletResponse response) {

  thisresponse=response;

  }

  public void login(){

  try {

  //HttpServletRequest request =ServletActionContextgetRequest();

  // HttpServletResponse response=ServletActionContextgetResponse();

  thisresponsesetContentType("text/html;charset=utf-8");

  thisresponsesetCharacterEncoding("UTF-8");

  if(thisrequestgetParameter("username")equals("123456")){

  thisresponsegetWriter()write("真的很奇怪,日本人!");

  }else if(thisrequestgetParameter("username")equals("zhd")){

  thisresponsegetWriter()write("没有错,我就是东子哥!");

  }else{

  thisresponsegetWriter()write("我就是东子哥!");

  }

  //将要返回的实体对象进行json处理

  // JSONObject json=JSONObjectfromObject(thisgetUsername());

  //输出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}

  // Systemoutprintln(json);

  // thisresponsegetWriter()write(jsontoString());

  /

  JSONObject json=new JSONObject();

  jsonput("login", "login");

  responsesetContentType("text/html;charset=utf-8");

  Systemoutprintln(json);

  byte[] jsonBytes = jsontoString()getBytes("utf-8");

  responsesetContentLength(jsonByteslength);

  responsegetOutputStream()write(jsonBytes);

  /

  /

  JSONObject json=new JSONObject();

  jsonput("login", "login");

  byte[] jsonBytes = jsontoString()getBytes("utf-8");

  responsesetContentType("text/html;charset=utf-8");

  responsesetContentLength(jsonByteslength);

  responsegetOutputStream()write(jsonBytes);

  responsegetOutputStream()flush();

  responsegetOutputStream()close();

  /

  } catch (Exception e) {

  eprintStackTrace();

  }

  // return null;

  }

  }

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Android客户端怎么与服务器数据库连接?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情