android服务器代码
❶ android上传录音到服务器代码思路
你先得确定服务器用什么协议啊,HTTP,webservice,socket等等,如果用http一般两种方式,一个是java自带的urlhttpconnection,还有就是阿帕奇的httpclient。
代码片段
// 使用POST方法提交数据,必须大写
conn.setRequestMethod("POST");
// 需要输出流
conn.setDoOutput(true);
// 需要输入流
conn.setDoInput(true);
// 连接超时,10秒
conn.setConnectTimeout(10 * 1000);
// 读取超时,10秒
conn.setReadTimeout(10 * 1000);
// 打开输出流,写入数据
out = conn.getOutputStream();
out.write(data);
out.flush();
// 以上
conn.connect();
if (conn.getResponseCode() == 200) {
in = conn.getInputStream();
// TODO 读取数据
// 参考
int contentLength = conn.getContentLength();
ByteArrayOutputStream buf = new ByteArrayOutputStream(
contentLength > 0 ? contentLength : 1024);
byte[] buffer = new byte[1024];
while ((contentLength = in.read(buffer)) != -1) {
buf.write(buffer, 0, contentLength);
}
// 可选
buf.flush();
return buf.toByteArray();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (conn != null) {
conn.disconnect();
}
// 错误的写法
// try {
// in.close();
// out.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
//尽量不要返回null 避免空指针异常
return new byte[0];
}
服务器在getpost里面接收可以转为btye数组,然后在转为文件
❷ android开发:怎样实现上传文件到Tomcat服务器上,求可执行的代码,越简洁越好
服务器端写个servlet,然后在doPost()方法里处理客户端上传的文件,大概代码:
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 1024); // 设置最多只允许在内存中存储的数据, 单位:字节
factory.setRepository(cachepath); // 设置一旦文件大小超过设定值时数据存放的目录
ServletFileUpload srvFileUpload = new ServletFileUpload(factory);
srvFileUpload.setSizeMax(1024 * 1024 * 1024); // 设置允许用户上传文件大小, 单位:字节
// 开始读取上传信息
List fileItems = null;
try {
fileItems = srvFileUpload.parseRequest(request);
} catch (Exception e) {
System.out.println("获取上传信息。。。。。。失败");
}
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
// 取出文件域的所有表单信息
} else {
// 取出不是文件域的所有表单信息
}
}
❸ Android中服务端代码如何导入工程当中
android的服务端代码的话,你可以导入一个mole,这样就能自动导入到工程里面,就能使用里面的代码。
❹ 如何导入与配置从网上下载的android源代码及服务器端源代码
将Android项目导入import进Eclipse。 注意SDK版本是否匹配 。 服务器部署到Tomcat下。 你得在数据库中将这个点菜系统的数据库和表建好,或者导入。在服务器的代码中修改好你的数据库名和密码。
❺ android studio怎么使用git在服务器上拿代码
1
准备,下载git到你的电脑上,下载地址: http://git-scm.com/downloads
安装,直接下一步下一步就好,记得下载位置就好,配置的时候要用
2
在studio中设置git插件:File->Setting->Version Control->Git,添加您刚刚安装的git地址目录,例如: C:\Program Files\Git\bin\git.exe ,
然后可以点击Test测试一下,如下图:那么你就设置成功了。
3
初始化git项目(git init),操作如下:VCS->Enable Control Integration->Select "Git".
4
为git添加remote,在这一步中,studio没有为我们提供可视化的GUI,得用Git工具了。找到并打开git安装目录下面的Git Bash,将目录切换到项目的目录,然后输入git添加remote的命令,例如:git remote add origin "https://github.com/xxx/xxx.git".
5
将代码添加到VCS(git add),选中要提交的文件->VCS->Git->Add,
6
提交变化(git commit),VCS->Commit Changes, 在提交的时候可以选择Commit and Push,就可以直接push到服务器。
7
Git Push,VCS->Git->Push.
最后,如果要是clone project到studio
❻ 如何部署android服务器端的java代码
Java平台般三版本:Java ME(微型版用于某些手机)、Java SE(标准版用于台式电脑)、Java EE(企业版用于服务器端应用)谈Java我通指Java SE版本包含虚拟机编译器
首先Java代码编译称字节码间格式字节码目标电脑运行虚拟机快速解析目标电脑硬件操作系统所需要本机格式
除发者提供编写处运行优势Java能通垃圾收器(GC)实现自内存管理发者免手代码释放用象内存虽功能非用且降低代码引入内存问题风险增加运行销需要停执行垃圾收进程
本文比较Java SE用于Android发Java间差异首先我介绍发者习惯Java
SE语言结构及何Android运行其我介绍何优化AndroidJava代码何优化内存配及何恰处理线程
比较AndroidDalvik JavaJava SE
虽远Android现前发者能用Java编程语言移设备编写应用程序Java功能极限版本称Java
ME(微型版)同移设备需编写同代码写应用程序能支持Java
ME任何手机运行几乎能外由于存线商店应用发布程极其复杂
Android问世发者提供构建智能手机强应用机发者需用Java编程语言及熟知标准Java
API编写代码尽管Android发者仍使用Java SE编译器编译应用程序发现James
Gosling发JavaAndroid设备Java存许同处
Android设备运行VM(虚拟机)称Dalvik初由谷歌Dan
Bornstein发适用于CPU内存受限移设备Java SEDalvik Java存些差异主要体现虚拟机Java
SE使用栈机设计Dalvik设计基于寄存器机器Android SDKdx工具Java
SE栈机器字节码转换基于寄存器Dalvik机器字节码该转换步骤由IDE自完
基于栈虚拟机基于寄存器虚拟机定义及差异列入我讨论范围由于历史原Android使用基于寄存器虚拟机虽基于寄存器虚拟机比基于栈虚拟机快32%限于执行解释字节码虚拟机(说解释型虚拟机)Android
2.2版本(称Froyo)前Dalvik虚拟机都纯解释型Froyo版本引入JIT编译器(即编译)Java
SE早优势
JIT编译称态翻译执行前字节码翻译本机代码(图1所示)主要两处首先消除些纯解释型虚拟机销;其能本机代码执行优化通静态编译代码做例JIT编译器运行CPU选择合适优化根据应用程序输入析代码何运行便进行步优化
图1Android JavaJava SE翻译步骤
虽AndroidDalvik JIT编译器发展前景要达Java SEJIT编译器般稳定、熟度尚需段间Dalvik JIT现Android提供巨性能优势且断改善
JAVA
SE虚拟机Dalvik虚拟机另区别者进行优化运行同机器实例机启叫做zygote进程该进程创建第Dalvik实例由实例创建所其实例应用程序启zygote进程收创建新虚拟机实例请求并给该应用程序创建新进程(图2所示)发者已习惯于Java
SE发设计能看起切实际优势避免由应用程序运行失败导致Dalvik虚拟机崩溃继引发应用程序崩溃
图2Android启新Dalvik虚拟机实例
AndroidJava
SE除运行虚拟机同外实现API式Android属于javajavax包API都自Apache
Harmony(源项目旨重新实现Java SE软件栈该项目201111月再维护)发面些APIJava
SE包类似存些差别例谷歌HttpUrlConnection类进行Java SE版本所没重升级
外Android平台移除Java
SE关API例Swing/AWT包完全移除Android使用同UI框架其移除APIRMI、CORBA、ImageIOJMX或者替换特定Android版本(android包空间内)或者些实际原根本存
优化AndroidJava代码
经改进Java
SE具备些简化编写复杂代码结构新特性其些特性让整流程变更简单发者需要解何及何确使用另外由于Java
SE用于服务器端发(使用Java企业版API)发员专门服务器端Java代码进行优化注解Java虚拟机脚本语言支持服务器端发进行优化例证虽些工具构建端发强发Android客户端代码些特性作用甚至起反作用Java发者已经习惯于限量RAMCPUAndroid发需要密切关注性能内存配简单说发者需要使用稍微同待Android端发
随着Android首发布情况所改变曾经些Android尽量用Java规范重新推荐主要Android目前JIT编译器解决些规范导致性能问题
本文讨论编写Android应用程序需要解Java代码我深究Java编程语言细节重点关注Android发重要东西发者仍需解数适用于Java SE规则建议同适用于AndroidDalvik虚拟机
Android类型安全枚举
Java SE 5.0新增许便发者新特性其值期待引入类型安全枚举枚举代码用表示属于某组几选择早期版本Java用整型量解决问题虽技术行容易错请看面代码:
public class Machine {
public static final int STOPPED = 10;
public static final int INITIALIZING = 20;
public static final int STARTING = 30;
public static final int RUNNING = 40;
public static final int STOPPING = 50;
public static final int CRASHED = 60;
private int mState;
public Machine() {
mState = STOPPED;
}
public int getState() {
return mState;
}
public void setState(int state) {
mState = state;
}
}
问题虽些量期望没机制保证setState()接收同值要设置添加检查旦非预期值发者需要处理错误发者所需要编译检查非赋值类型安全枚举解决问题所示:
public class Machine {
public enum State {
STOPPED, INITIALIZING, STARTING, RUNNING, STOPPING, CRASHED
}
private State mState;
public Machine() {
mState = State.STOPPED;
}
public State getState() {
return mState;
}
public void setState(State state) {
mState = state;
}
}
注意声明同类型安全值新加内部枚举类编译解决非赋值问题所代码更容易错
Dalvik虚拟机没JIT编译器优化代码建议Android平台使用枚举类型使用整型量相比种设计带内存性能损失更些版本Android
API存整型量原今更强JIT编译器及断改进Dalvik虚拟机发者必再担问题放胆使用类型安全枚举即
仍存些情况使用整型量更选择像intJava基本类型增加GC销外Android SDK许已API仍依赖基本类型比Handler类——种情况没太选择
Android增强版for循环
Java SE 5.0引入增强版for循环提供通用缩写表达式遍历集合数组首先比较五种:
void loopOne(String[] names) {
int size = names.length;
for (int i = 0; i < size; i++) {
printName(names[i]);
}
}
void loopTwo(String[] names) {
for (String name : names) {
printName(name);
}
}
void loopThree(Collection names) {
for (String name : names) {
printName(name);
}
}
void loopFour(Collection names) {
Iterator iterator = names.iterator();
while (iterator.hasNext()) {
printName(iterator.next());
}
}
// 要ArrayList使用增强版for循环
void loopFive(ArrayList names) {
int size = names.size();
for (int i = 0; i < size; i++) {
printName(names.get(i));
}
}
面显示四种同遍历集合数组式前面两种着相同性能所读取元素放数组使用增强版for循环Collection象说增强版for循环使用迭代器遍历元素着相同性能ArrayList象应避免使用增强版for循环
仅需要遍历元素且需要元素位置定要使用数组或者ArrayList所其Collection类些情况更慢
般情况读取元素几乎变数据集性能要求高建议使用规数组数组固定添加数据影响性能所编写代码要考虑所素
队列、同步锁
通情况应用程序线程产数据另线程使用见例线程获取网络数据另线程(操作UI主线程)些数据展现给用户种模式称产者/消费者模式面向象编程课程发者用算实现该模式能要花几面介绍些简化产者/消费者模式实现现类
1. 更智能队列
虽已现类并能用更少代码实现该功能许Java发者仍选择使用LinkedList及同步块实现队列功能发者java.util.concurrent包找同步相关类外本包包含信号量、锁及单变量进行原操作类考虑面使用标准LinkedList实现线程安全队列代码
public class ThreadSafeQueue {
private LinkedList mList = new LinkedList();
private final Object mLock = new Object();
public void offer(String value) {
synchronized (mLock) {
mList.offer(value);
mLock.notifyAll();
}
}
public synchronized String poll() {
synchronized (mLock) {
while (mList.isEmpty()) {
try {
mLock.wait();
} catch (InterruptedException e) {
//简洁起见忽略异处理
}
}
return mList.poll();
}
}
}
虽段代码确并能考试满实现测试段代码浪费间实际所前面代码用面行代替
LinkedBlockingQueue blockingQueue =
new LinkedBlockingQueue();
面行代码能像前面例提供相同类型阻塞队列甚至能提供额外线程安全操作java.util.concurrent包含许选队列及并发映射类所般情况建议使用像前示例使用更代码
2. 更智能锁
Java提供synchronized关键字允许发者创建线程安全代码块synchronized关键字易于使用容易滥用性能造负面影响需要区读数据写数据synchronized关键字并效幸java.util.concurrent.locks包工具类种情况提供支持
public class ReadWriteLockDemo {
private final ReentrantReadWriteLock mLock;
private String mName;
private int mAge;
private String mAddress;
public ReadWriteLockDemo() {
mLock = new ReentrantReadWriteLock();
}
public void setPersonData(String name, int age, String address) {
ReentrantReadWriteLock.WriteLock writeLock = mLock.writeLock();
try {
writeLock.lock();
mName = name;
mAge = age;
mAddress = address;
} finally {
writeLock.unlock();
}
}
public String getName() {
ReentrantReadWriteLock.ReadLock readLock = mLock.readLock();
try {
readLock.lock();
return mName;
} finally {
readLock.unlock();
}
}
// 重复代码再赘述
}
面代码展示使用ReentrantReadWriteLock允许并发线程数据进行读访问并确保同间线程写入相同数据
代码使用synchronized关键字仍处理锁问题效论何种情况都要考虑ReentrantReadWriteLock否
❼ android上传图片到服务器,求服务器那边和android的Activity的完整代码。
服务器端servlet代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取输入流,是HTTP协议中的实体内容
ServletInputStream sis=request.getInputStream();
File file = new File(request.getSession().getServletContext().getRealPath("/img/"),"img_"+0+".jpg");
for (int imgnum = 0;file.exists();imgnum++)
{
file = new File(request.getSession().getServletContext().getRealPath("/img/"),"img_"+imgnum+".jpg");
}
//缓冲区
byte buffer[]=new byte[1024];
FileOutputStream fos=new FileOutputStream(file);
int len=sis.read(buffer, 0, 1024);
//把流里的信息循环读入到文件中
while( len!=-1 )
{
fos.write(buffer, 0, len);
len=sis.readLine(buffer, 0, 1024);
}
fos.close();
sis.close();
}
android客户端代码:
public static void uploadFile(String imageFilePath)
{
String actionUrl = "http://192.168.1.32:8080/UploadServer/ImageServlet";
try
{
URL url =new URL(actionUrl);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
File file = new File(imageFilePath);
FileInputStream fStream = new FileInputStream(file);
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int length = -1;
while((length = fStream.read(buffer)) != -1)
{
ds.write(buffer, 0, length);
}
fStream.close();
ds.flush();
InputStream is = con.getInputStream();
int ch;
StringBuffer b =new StringBuffer();
while( ( ch = is.read() ) != -1 )
{
b.append( (char)ch );
}
ds.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
❽ php 做安卓 服务器 怎么编写代码
php只能做服务端的数据处理,然后将数据用接口的方式,以json的数据形式给安卓客户端程序调用。
test.php
<!--?php
classResponse{
constJSON=json;
/**
*按综合方式输出通信数据
*@paraminteger$code状态码
*@paramstring$message提示信息
*@paramarray$data数据
*@paramstring$type数据类型
*returnstring
*/
publicstaticfunctionshow($code,$message='',$data=array(),$type=self::JSON){
if(!is_numeric($code)){
return'';
}
$type=isset($_GET['format'])?$_GET['format']:self::JSON;
$result=array(
'code'=-->$code,
'message'=>$message,
'data'=>$data,
);
if($type=='json'){
self::json($code,$message,$data);
exit;
}elseif($type=='array'){
var_mp($result);
}elseif($type=='xml'){
self::xmlEncode($code,$message,$data);
exit;
}else{
//TODO
}
}
/**
*按json方式输出通信数据
*@paraminteger$code状态码
*@paramstring$message提示信息
*@paramarray$data数据
*returnstring
*/
publicstaticfunctionjson($code,$message='',$data=array()){
if(!is_numeric($code)){
return'';
}
$result=array(
'code'=>$code,
'message'=>$message,
'data'=>$data
);
echojson_encode($result);
exit;
}
/**
*按xml方式输出通信数据
*@paraminteger$code状态码
*@paramstring$message提示信息
*@paramarray$data数据
*returnstring
*/
publicstaticfunctionxmlEncode($code,$message,$data=array()){
if(!is_numeric($code)){
return'';
}
$result=array(
'code'=>$code,
'message'=>$message,
'data'=>$data,
);
header(Content-Type:text/xml);
$xml=<!--?xmlversion='1.0'encoding='UTF-8'?-->
;
$xml.=<root>
;
$xml.=self::xmlToEncode($result);
$xml.=</root>;
echo$xml;
}
($data){
$xml=$attr=;
foreach($dataas$key=>$value){
if(is_numeric($key)){
$attr=id='{$key}';
$key=item;
}
$xml.=<{$key}{$attr}>;
$xml.=is_array($value)?self::xmlToEncode($value):$value;
$xml.=<!--{$key}-->
;
}
return$xml;
}
}
<!--?php
require_once('./test.php');
$data=array(
'id'=-->1,
'name'=>david
);
Response::show(200,'success',$data);
❾ 可以用python写Android客户端的服务器端吗
可以的
服务器端使用python完成,下面为python代码:
代码如下:
#server.py
import socket
def getipaddrs(hostname):#只是为了显示IP,仅仅测试一下
result = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM)
return [x[4][0] for x in result]
host = ''#为空代表为本地host
hostname = socket.gethostname()
hostip = getipaddrs(hostname)
print('host ip', hostip)#应该显示为:127.0.1.1
port = 9999 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(4)
while True:
conn, addr = s.accept()
print('Connected by', addr)
data = conn.recv(1024)
if not data: break
conn.sendall(data)#把接收到数据原封不动的发送回去
print('Received', repr(data))
conn.close()
❿ java代码实现Android的视频 那服务器的代码的代码是
{
/**
*.
*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
RelativeLayoutrl=newRelativeLayout(this);
//创建TextView1
TextViewtv1=newTextView(this);
tv1.setText("111111111111111111111111111");
tv1.setTextSize(20);
//设定tv1的id,后面规则要用到
tv1.setId(1);
//将tv1加入布局
rl.addView(tv1);
//创建TextView2
TextViewtv2=newTextView(this);
tv2.setText("2222222222222222222222222222");
tv2.setTextSize(20);
//创建RelativeLayout.LayoutParams
RelativeLayout.LayoutParamsparams=newRelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
//添加规则1为tv1的id
params.addRule(RelativeLayout.BELOW,1);
//将tv2加入布局传入参数params
rl.addView(tv2,params);
setContentView(rl);
}