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);
}