Android客户端怎么与服务器数据库连接?
不能与数据库连接的
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;
}
}
0条评论