android上傳數據到伺服器
① Android怎麼定時上傳數據到伺服器
首先和伺服器建立socket 通訊,接通後進行數據傳輸,運槐而你僅僅需攔悄游要加簡銷一個定時器,到規定時間就傳輸數據,總得來說,你只需要看看socket和定時器這兩塊內容就完全足夠了
② Android怎麼定時上傳數據到伺服器
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Test extends Activity implements Runnable{
/** Called when the activity is first created. */
private Button btn_get = null;
private Button btn_post = null;
private TextView tv_rp = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_get = (Button) this.findViewById(R.id.Button01);
btn_post = (Button) this.findViewById(R.id.Button02);
tv_rp = (TextView) this.findViewById(R.id.TextView);
btn_get.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
String httpUrl = "http://192.168.0.132:8080/Android/httpreq.jsp?par=request-get";
HttpGet request = new HttpGet(httpUrl);
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(request);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
String str = EntityUtils.toString(response.getEntity());
tv_rp.setText(str);
}else{
tv_rp.setText("請求錯誤");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btn_post.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
String httpUrl = "http://192.168.0.132:8080/Android/httpreq.jsp";
HttpPost request = new HttpPost(httpUrl);
List<namevaluepair> params = new ArrayList<namevaluepair>();
params.add(new BasicNameValuePair("par","request-post"));
try {
HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
request.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(request);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
String str = EntityUtils.toString(response.getEntity());
tv_rp.setText(str);
}else{
tv_rp.setText("請求錯誤");
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
new Thread(this).start();
}
public void refresh(){
String httpUrl = "http://192.168.0.132:8080/Android/httpreq.jsp";
try {
URL url = new URL(httpUrl);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.connect();
InputStream input = urlConn.getInputStream();
InputStreamReader inputreader = new InputStreamReader(input);
BufferedReader reader = new BufferedReader(inputreader);
String str = null;
StringBuffer sb = new StringBuffer();
while((str = reader.readLine())!= null){
sb.append(str).append("\n");
}
if(sb != null){
tv_rp.setText(sb.toString());
}else{
tv_rp.setText("NULL");
}
reader.close();
inputreader.close();
input.close();
reader = null;
inputreader = null;
input = null;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Handler handler = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
refresh();
}
};
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(1000);
handler.sendMessage(handler.obtainMessage());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
③ android中如何上傳圖片到ftp伺服器
在安卓環境下可以使用,在java環境下也可以使用,已經在Java環境下實現了功能,然後移植到了安卓手機上,其它都是一樣的。
[java] view plain
package com.photo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class FileTool {
/**
* Description: 向FTP伺服器上傳文件
*
* @param url
* FTP伺服器hostname
* @param port
* FTP伺服器埠
* @param username
* FTP登錄賬號
* @param password
* FTP登錄密碼
* @param path
* FTP伺服器保存目錄,是linux下的目錄形式,如/photo/
* @param filename
* 上傳到FTP伺服器上的文件名,是自己定義的名字,
* @param input
* 輸入流
* @return 成功返回true,否則返回false
*/
public static boolean uploadFile(String url, int port, String username,
String password, String path, String filename, InputStream input) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(url, port);// 連接FTP伺服器
// 如果採用默認埠,可以使用ftp.connect(url)的方式直接連接FTP伺服器
ftp.login(username, password);//登錄
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
// 測試
public static void main(String[] args) {
FileInputStream in = null ;
File dir = new File("G://pathnew");
File files[] = dir.listFiles();
if(dir.isDirectory()) {
for(int i=0;i<files.length;i++) {
try {
in = new FileInputStream(files[i]);
boolean flag = uploadFile("17.8.119.77", 21, "android", "android",
"/photo/", "412424123412341234_20130715120334_" + i + ".jpg", in);
System.out.println(flag);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
}
以上為java代碼,下面是android代碼。
[java] view plain
package com.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new uploadThread().start();
}
class uploadThread extends Thread {
@Override
public void run() {
FileInputStream in = null ;
File dir = new File("/mnt/sdcard/DCIM/Camera/test/");
File files[] = dir.listFiles();
if(dir.isDirectory()) {
for(int i=0;i<files.length;i++) {
try {
in = new FileInputStream(files[i]);
boolean flag = FileTool.uploadFile("17.8.119.77", 21, "android", "android",
"/", "412424123412341234_20130715120334_" + i + ".jpg", in);
System.out.println(flag);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
}
}
④ android怎麼傳map對象到伺服器
Android應用開發中,會經常要提交數據到伺服器和從伺服器得到數據,本文主要是給出了利用http協議採用HttpClient方式向伺服器提交數據的方法。
代碼比較簡單,這里不去過多的闡述,直接看代碼。
/**
* @author Dylan 本類封裝了Android中向web伺服器提交數據的兩種方式四種方法
*/鄭歲唯
public class {
**
* 使用get請求以普通方式提交數據
*
* @param map
* 傳遞進來的數據,以map的形式進行了封裝
* @param path
* 要求伺服器servlet的地址
* @return 返雀滲回的boolean類型的參數
* @throws Exception
*/
public Boolean submitDataByDoGet(Map<String, String> map, String path)
throws Exception {
// 拼湊出請求地址
StringBuilder sb = new StringBuilder(path);
sb.append("?");
for (Map.Entry<String, String> entry : map.entrySet()) {
sb.append(entry.getKey()).append("=").append(entry.getValue());
sb.append("&");
}
sb.deleteCharAt(sb.length() - 1);
String str = sb.toString();
System.out.println(str);
URL Url = new URL(str);
HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();
HttpConn.setRequestMethod("GET");
HttpConn.setReadTimeout(5000);
// GET方式的請求不用設置什麼DoOutPut()之類的嗎?
if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
return true;
}
return false;
}
/**
* 普通方式的DoPost請求提交數據
*
* @param map
* 傳遞進來的數據,以map的形式進行了封裝
* @param path
* 要求伺服器servlet的地喊培址
* @return 返回的boolean類型的參數
* @throws Exception
*/
public Boolean submitDataByDoPost(Map<String, String> map, String path) throws Exception {
// 注意Post地址中是不帶參數的,所以newURL的時候要注意不能加上後面的參數
URL Url = new URL(path);
// Post方式提交的時候參數和URL是分開提交的,參數形式是這樣子的:name=y&age=6
StringBuilder sb = new StringBuilder();
// sb.append("?");
for (Map.Entry<String, String> entry : map.entrySet()) {
sb.append(entry.getKey()).append("=").append(entry.getValue());
sb.append("&");
}
sb.deleteCharAt(sb.length() - 1);
String str = sb.toString();[/font][/size]
HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();
HttpConn.setRequestMethod("POST");
HttpConn.setReadTimeout(5000);
HttpConn.setDoOutput(true);
HttpConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
HttpConn.setRequestProperty("Content-Length",
String.valueOf(str.getBytes().length));
OutputStream os = HttpConn.getOutputStream();
os.write(str.getBytes());
if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
return true;
}
return false;
}
/**
* 以HttpClient的DoGet方式向伺服器發送請數據
*
* @param map
* 傳遞進來的數據,以map的形式進行了封裝
* @param path
* 要求伺服器servlet的地址
* @return 返回的boolean類型的參數
* @throws Exception
*/
public Boolean submitDataByHttpClientDoGet(Map<String, String> map,
String path) throws Exception {
HttpClient hc = new DefaultHttpClient();
// 請求路徑
StringBuilder sb = new StringBuilder(path);
sb.append("?");
for (Map.Entry<String, String> entry : map.entrySet()) {
sb.append(entry.getKey()).append("=").append(entry.getValue());
sb.append("&");
}
sb.deleteCharAt(sb.length() - 1);
String str = sb.toString();
System.out.println(str);
HttpGet request = new HttpGet(sb.toString());[/font][/size]
HttpResponse response = hc.execute(request);
if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
return true;
}
return false;
}
復制代碼
/**
* 以HttpClient的DoPost方式提交數據到伺服器
*
* @param map
* 傳遞進來的數據,以map的形式進行了封裝
* @param path
* 要求伺服器servlet的地址
* @return 返回的boolean類型的參數
* @throws Exception
*/
public Boolean submintDataByHttpClientDoPost(Map<String, String> map, String path) throws Exception {
// 1. 獲得一個相當於瀏覽器對象HttpClient,使用這個介面的實現類來創建對象,DefaultHttpClient
HttpClient hc = new DefaultHttpClient();
// DoPost方式請求的時候設置請求,關鍵是路徑
HttpPost request = new HttpPost(path);
// 2. 為請求設置請求參數,也即是將要上傳到web伺服器上的參數
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
for (Map.Entry<String, String> entry : map.entrySet()) {
NameValuePair nameValuePairs = new BasicNameValuePair(
entry.getKey(), entry.getValue());
parameters.add(nameValuePairs);
}
// 請求實體HttpEntity也是一個介面,我們用它的實現類UrlEncodedFormEntity來創建對象,注意後面一個String類型的參數是用來指定編碼的
HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");
request.setEntity(entity);
// 3. 執行請求
HttpResponse response = hc.execute(request);
// 4. 通過返回碼來判斷請求成功與否
if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
return true;
}
return false;
}
}
⑤ Android上大文件傳輸到伺服器,最大能傳輸多大的文件
Android 上傳時, 雖然他的定義是long型的, 但是位元組長度還是會受到 Integer.Max的影響,所以上傳是多隻能傳 2.1G 的文件.
⑥ android中數據上傳到伺服器怎麼實現
伺服器端寫個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 如何把一個資料庫文件提交到伺服器上面去
json就和map的用法一樣,new一個JSONObject json=new JSONObject();
json.put("username", username);
json.put("password",password);
用httppclient這個類傳過去,post請求的話代碼比較多就不寫了,我說下get請求比如你的web項目名字是ServletTest,並且你在項目里寫個servlet類名字叫test。那麼沒有綁定域名的情況下url地址應該是http : // +localhost:8080/ ServletTest/test?msg= ( json.toString)。注意括弧內要在代碼實現。 然後在伺服器端收的信息就是{「username」:username , "password": password}格式的數據了。在你的test類裡面doGet(HttpRequest request , HttpResponse respone){
String msg=request.getParameter("msg");//就能得到{「username」:username , "passwor。。。。
然後JSONObject serverjson=new JSONObject(msg);
String name= serverjson.getString("username");
String password=serverjson.getString("password");
這樣就是封裝發送解析的過程
}.
⑧ android 怎麼上傳數組到伺服器
1.使用JSONObject 、JSONArray將一個數組編寫成json格式傳遞到php伺服器中,php程序接受json格式的參數並解析成數組
這個方法可以就是讓php伺服器端解析android上傳的json格式參數,再構建成一個數組,所以不解釋。
2.用拼接欄位,手動遍歷創建所需要發送的key和value,key和value類型為string[],
例如
php端程序需要接受的數組格式為
array=>[ "key1" => "value1",
"key2" => "value2",
"key3" => "value3",
......]
android端的處理為:
string [] key = {"array[key1]","array[key2]","array[key3]",....}
對應的值:
string [] value = {"value1","value2","value3",....}
若php端程序需要接受的數組格式為
array["key1"=>["key11"=>"value11",
⑨ 我要做Android手機向伺服器端發送數據,
是在WINDOWS下開發?用系統的IIS吧,在internet 信息服務里添加個網站,設置好路徑,然後弄個html文件寫死你的模擬數據放在你設定的文件路徑下。可以測試就好