編輯:關於Android編程
本文實例講述了Android實現拍照上傳功能的方法。分享給大家供大家參考,具體如下:
1、LoginWindow.java --登錄窗口
package com.hemi.rhet; import com.hemi.rhet.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; public class LoginWindow extends Activity { @Override public void onCreate(Bundle savedInstanceState) { System.out.println("enter LoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.login_window); mUserName = (EditText)findViewById(R.id.username); mUserPasswd = (EditText)findViewById(R.id.userpasswd); cbx_cmwap = (CheckBox) findViewById(R.id.cbx_cmwap); loginButton = (Button) findViewById(R.id.login_button); exitButton = (Button) findViewById(R.id.exit_button); loginBtnListener = new View.OnClickListener() { public void onClick(View view) { LoginWindow.isCmwap = cbx_cmwap.isChecked(); if (view == loginButton) { launchFetion(); } else if(view == exitButton) { finish(); } } }; loginButton.setOnClickListener(loginBtnListener); exitButton.setOnClickListener(loginBtnListener); } private void launchFetion() { Intent i = new Intent(this, FuncSelector.class); i.putExtra(KEY_LOGIN_NAME, mUserName.getText().toString()); i.putExtra(KEY_LOGIN_PASSWD, mUserPasswd.getText().toString()); i.putExtra(KEY_LOGIN_TYPE, cbx_cmwap.isChecked()); startActivity(i); } @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { // System.out.println("enter onKeyDown() in LoginWindow!"); // // if (null != loginBtnListener) { // View aview = getCurrentFocus(); // loginBtnListener.onClick(aview); // } return false; } private Button loginButton, exitButton; private EditText mUserName; private EditText mUserPasswd; private CheckBox cbx_cmwap; private OnClickListener loginBtnListener; public static final String KEY_LOGIN_NAME = "login_name"; public static final String KEY_LOGIN_PASSWD = "login_passwd"; public static final String KEY_LOGIN_TYPE = "login_type"; public static boolean isCmwap = false; }
2. FuncSelector.java -- 功能模塊選擇窗口
package com.hemi.rhet; import java.util.ArrayList; import java.util.HashMap; import com.hemi.rhet.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.SimpleAdapter; import android.widget.AdapterView.OnItemClickListener; public class FuncSelector extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Log.i("info", "enter LoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.func_selector); initFuncGrids(); } private void initFuncGrids() { GridView funcSeleView = (GridView) findViewById(R.id.func_selector); // 生成動態數組,並且轉入數據 ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.photo_upload); // 添加圖像資源的ID map.put("ItemText", getString(R.string.photo_upload)); // 按序號做ItemText lstImageItem.add(map); map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.icon); map.put("ItemText", getString(R.string.sys_config)); lstImageItem.add(map); for (int i = 1; i <= 10; i++) { map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.icon); // 添加圖像資源的ID map.put("ItemText", "NO." + String.valueOf(i)); // 按序號做ItemText lstImageItem.add(map); } // 生成適配器的ImageItem <====> 動態數組的元素,兩者一一對應 SimpleAdapter saImageItems = new SimpleAdapter(this, // 沒什麼解釋 lstImageItem,// 數據來源 R.layout.night_item,// night_item的XML實現 // 動態數組與ImageItem對應的子項 new String[] { "ItemImage", "ItemText" }, // ImageItem的XML文件裡面的一個ImageView,兩個TextView ID new int[] {R.id.ItemImage,R.id.ItemText}); //null); // 添加並且顯示 funcSeleView.setAdapter(saImageItems); //saImageItems.notifyDataSetChanged(); // 添加消息處理 funcSeleView.setOnItemClickListener(new ItemClickListener()); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, EXIT_ID,0, R.string.back_button); return true; } //@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { boolean result = true; switch(item.getItemId()) { case EXIT_ID: this.finish(); break; default: result = super.onMenuItemSelected(featureId, item); break; } return result; } // 當AdapterView被單擊(觸摸屏或者鍵盤),則返回的Item單擊事件 class ItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView<?> arg0,// The AdapterView where the // click happened View arg1,// The view within the AdapterView that was clicked int arg2,// The position of the view in the adapter long arg3// The row id of the item that was clicked ) { // 在本例中arg2=arg3 HashMap<String, Object> item = (HashMap<String, Object>) arg0 .getItemAtPosition(arg2); String tmpStr = (String) item.get("ItemText"); //item.put("ItemText", tmpStr + tmpStr.substring(tmpStr.length() - 1)); // 顯示所選Item的ItemText // setTitle((String)item.get("ItemText")); Log.i("info", (String) item.get("ItemText")); ((SimpleAdapter) arg0.getAdapter()).notifyDataSetChanged(); Intent i; switch (arg2) { case 0: i = new Intent(); i.setClass(FuncSelector.this, PhotoUpload.class); startActivity(i); break; case 1: i = new Intent(); i.setClass(FuncSelector.this, ConfigWindow.class); startActivity(i); break; default: break; } } } private static final int TAKE_PHOTO_ID = Menu.FIRST; private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1; private static final int EXIT_ID = Menu.FIRST + 3; }//FuncSelector
3. PhotoUpload.java -- 照片上傳模塊
package com.hemi.rhet; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpResponse; 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.HttpPost; import org.apache.http.entity.FileEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import com.hemi.rhet.R; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.ImageView; import android.widget.SimpleAdapter; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class PhotoUpload extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Log.i("info", "enter LoginWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.func_selector); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (TAKE_PHOTO_ID == requestCode) { if (resultCode != RESULT_OK) return; Bundle extras = data.getExtras(); try { Bitmap photoCaptured = (Bitmap) extras.get("data"); ImageView img = new ImageView(this); img.setImageBitmap(photoCaptured); setContentView(img); //store to sd card ByteArrayOutputStream baos = new ByteArrayOutputStream(); photoCaptured.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] photoBytes = baos.toByteArray(); File aFile = new File(getDatedFName(SD_CARD_TEMP_DIR)); photoPath = aFile.getAbsolutePath(); boolean b; if (aFile.exists()) b = aFile.delete(); //f.mkdirs(); aFile.createNewFile(); //need add permission to manifest FileOutputStream fos = new FileOutputStream(aFile); fos.write(photoBytes); fos.close(); Log.d("info", "onPictureTaken - wrote bytes: " + photoBytes.length); Uri capturedImage = Uri .parse(android.provider.MediaStore.Images.Media .insertImage(getContentResolver(), aFile .getAbsolutePath(), null, null)); Log.i("camera", "Selected image: " + capturedImage.toString()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else if (UPLOAD_PHOTO_ID == requestCode) { } } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, TAKE_PHOTO_ID,0, R.string.take_photo); menu.add(0, UPLOAD_PHOTO_ID,0, R.string.upload_photo); menu.add(0, BACK_ID,0, R.string.back_button); return true; } //@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { boolean result = true; switch(item.getItemId()) { case TAKE_PHOTO_ID: Log.i("info", "ready to take photos!"); Intent i = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(i, TAKE_PHOTO_ID); result = true; break; case UPLOAD_PHOTO_ID: uploadFile2Svr(); break; case BACK_ID: this.finish(); break; default: result = super.onMenuItemSelected(featureId, item); break; } return result; } public void uploadFile2Svr() { HttpClient httpclient = new DefaultHttpClient(); String urlStr = new StringBuffer().append(HTTP_PROTOCOL) .append(/*SERVER_IP*/ConfigWindow.getServerIp()) .append(':') .append(/*SERVER_PORT*/ConfigWindow.getServerPort()) .append(FILE_UPLOADER_URL) .toString(); HttpPost httppost = new HttpPost(urlStr); String uploadMsg = "上傳 照片失敗!"; try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); // Your DATA nameValuePairs.add(new BasicNameValuePair("filename", ("IMAGE.jpg")) ); // nameValuePairs.add(new BasicNameValuePair("orderno", "1")); // nameValuePairs.add(new BasicNameValuePair("userid", "123")); // nameValuePairs.add(new BasicNameValuePair("attach_type", "1")); // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); File aFile = new File(photoPath); Log.i("info -- photoPath: ", photoPath); FileEntity fileEty = new FileEntity(aFile, "binary/octet-stream"); httppost.setEntity(fileEty); httppost.addHeader("filename", /*("IMAGE.jpg")*/aFile.getName()); HttpResponse response; response = httpclient.execute(httppost); //Log.i("info -- response: ", response.getStatusLine().getReasonPhrase()); Header[] headers = response.getAllHeaders(); headers = response.getHeaders("resultcode"); if (headers[0].getValue().equals("0")) { uploadMsg = "上傳照片成功!"; } } catch (UnsupportedEncodingException e) { //e.printStackTrace(); uploadMsg += e.toString(); Log.e("exception", e.toString()); } catch (ClientProtocolException e) { //e.printStackTrace(); uploadMsg += e.toString(); Log.e("exception", e.toString()); } catch (IOException e) { //e.printStackTrace(); uploadMsg += e.toString(); Log.e("exception", e.toString()); } finally { Toast.makeText(PhotoUpload.this, uploadMsg, Toast.LENGTH_LONG).show(); httpclient.getConnectionManager().shutdown(); } } public void uploadFile2Svr2() { BufferedReader in = null; HttpClient httpclient = new DefaultHttpClient(); String urlStr = new StringBuffer().append(HTTP_PROTOCOL) .append(ConfigWindow.getServerIp()) .append(ConfigWindow.getServerPort()) .append(FILE_UPLOADER_URL) .toString(); URL url = null; try { url = new URL(urlStr); } catch (MalformedURLException e1) { e1.printStackTrace(); } HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "/r/n"; String twoHyphens = "--"; String boundary = "*****"; int maxBufferSize = 16 * 1024; try { // List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); // // Your DATA // nameValuePairs.add(new BasicNameValuePair("filename", getDatedFName("IMAGE.jpg")) ); // nameValuePairs.add(new BasicNameValuePair("orderno", "1")); // nameValuePairs.add(new BasicNameValuePair("userid", "123")); // nameValuePairs.add(new BasicNameValuePair("attach_type", "1")); //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(120000); // Allow Inputs conn.setDoInput(true); // Allow Outputs conn.setDoOutput(true); // Don't use a cached copy. conn.setUseCaches(false); // Use a post method. conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", //"multipart/form-data;boundary=" + boundary); "application/x-www-form-urlencoded"); conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6"); //conn.setRequestProperty("accept-language", "zh-cn,zh;q=0.5"); //conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ boundary); conn.connect(); //OutputStream connOs = conn.getOutputStream(); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=/"uploadedfile/";filename=/"" + "exsistingFileName" + "/"" + lineEnd); //dos.writeBytes(lineEnd); Log.i("info", "Headers are written"); // upload file to webserver via http FileInputStream fileInputStream = new FileInputStream(photoPath); // create a buffer of maximum size int bytesAvailable = fileInputStream.available(); int bufferSize = Math.min(bytesAvailable, maxBufferSize); byte[] buffer = new byte[bufferSize]; // read file and write it into form... int bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } // send multipart form data necesssary after file data... dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); // close streams Log.e("info", "File is written"); fileInputStream.close(); dos.flush(); dos.close(); dos = null; // response // HttpResponse response; // response = httpclient.execute(httppost); // response = httpclient.execute(conn.get); in = new BufferedReader( new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); String result = sb.toString(); Log.i("info", result); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(in != null){ try{ in.close(); }catch(IOException ioe){ Log.e("error", ioe.toString()); } } } } public static String getDatedFName(String fname) { StringBuffer result = new StringBuffer(); SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss"); String dateSfx = "_" + df.format(new Date()); int idx = fname.lastIndexOf('.'); if (idx != -1) { result.append(fname.substring(0, idx)); result.append(dateSfx); result.append(fname.substring(idx)); } else { result.append(fname); result.append(dateSfx); } return result.toString(); } //============================================= //private Bitmap photoCaptured; private String photoPath = "/sdcard/IMAGE_100225083437.jpg"; //"/sdcard/1.txt"; private static final int TAKE_PHOTO_ID = Menu.FIRST; private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1; private static final int BACK_ID = Menu.FIRST + 3; private static final String HTTP_PROTOCOL = "http://"; private static final String FILE_UPLOADER_URL = "/fileuploader/system/fileUpload"; private String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator + "IMG.jpg"; }
4. ConfigWindow.java--系統配置窗口
package com.hemi.rhet; import com.hemi.rhet.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; public class ConfigWindow extends Activity { @Override public void onCreate(Bundle savedInstanceState) { System.out.println("enter ConfigWindow.onCreate()!"); super.onCreate(savedInstanceState); setContentView(R.layout.config_window); mServerIP = (EditText)findViewById(R.id.serverip); mServerPort = (EditText)findViewById(R.id.serverport); //hemerr mServerIP.setText(serverIp); mServerPort.setText(serverPort); okButton = (Button) findViewById(R.id.ok_button); backButton = (Button) findViewById(R.id.back_button); loginBtnListener = new View.OnClickListener() { public void onClick(View view) { if (view == okButton) { serverIp = mServerIP.getText().toString(); serverPort = mServerPort.getText().toString(); Log.i("info", "IP is: "+serverIp+"/tPort is: "+serverPort); finish(); } else if(view == backButton) { finish(); } } }; okButton.setOnClickListener(loginBtnListener); backButton.setOnClickListener(loginBtnListener); } private void launchFetion() { Intent i = new Intent(this, FuncSelector.class); i.putExtra(KEY_LOGIN_NAME, mServerIP.getText().toString()); i.putExtra(KEY_LOGIN_PASSWD, mServerPort.getText().toString()); startActivity(i); } @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { // System.out.println("enter onKeyDown() in LoginWindow!"); // // if (null != loginBtnListener) { // View aview = getCurrentFocus(); // loginBtnListener.onClick(aview); // } return false; } public static String getServerIp() { return serverIp; } public static String getServerPort() { return serverPort; } private Button okButton, backButton; private EditText mServerIP; private EditText mServerPort; private OnClickListener loginBtnListener; public static final String KEY_LOGIN_NAME = "login_name"; public static final String KEY_LOGIN_PASSWD = "login_passwd"; public static final String KEY_LOGIN_TYPE = "login_type"; public static String serverIp = "192.168.0.98"; //; public static String serverPort = "8081"; }
還需要增加bg_logo.jpg、icon.png、photo_upload.png等幾個圖片。
Android拍照上傳程序的xml配置文件
1. login_window.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg_logo" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/user_name" /> <EditText android:id="@+id/username" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:text="user" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/user_passwd" /> <EditText android:id="@+id/userpasswd" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:text="user" android:capitalize="none" android:gravity="fill_horizontal" android:password="true" android:textAppearance="?android:attr/textAppearanceMedium" /> <CheckBox android:id="@+id/cbx_cmwap" android:text="CMWAP" android:checked="false" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RelativeLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/login_button" android:text="LOGIN" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/exit_button" android:text="EXIT" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_toLeftOf="@id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </LinearLayout>
2. func_selector.xml
<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/func_selector" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:columnWidth="90dp" android:stretchMode="columnWidth" android:gravity="center" android:background="@drawable/bg_logo" />
3. night_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:layout_width="fill_parent"> <ImageView android:layout_height="wrap_content" android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_centerHorizontal="true"> </ImageView> <TextView android:layout_width="wrap_content" android:layout_below="@+id/ItemImage" android:layout_height="wrap_content" android:text="TextView01" android:layout_centerHorizontal="true" android:id="@+id/ItemText"> </TextView> </RelativeLayout>
4. config_window.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/server_ip" /> <EditText android:id="@+id/serverip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:text="@string/server_port" /> <EditText android:id="@+id/serverport" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:scrollHorizontally="true" android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" /> <RelativeLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/ok_button" android:text="@string/ok_button" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/back_button" android:text="@string/back_button" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_toLeftOf="@id/ok_button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </LinearLayout>
5. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hemi.rhet" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:label="@string/app_name" android:name="LoginWindow"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="FuncSelector"></activity> <activity android:name="PhotoUpload"></activity> <activity android:name="ConfigWindow"></activity> </application> <uses-sdk android:minSdkVersion="5"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> </manifest>
Android拍照上傳程序的Servlet程序樣例
UploadFileServlet.java:
package com.hemi.rhet.servlet; import java.io.*; import java.net.InetAddress; import java.net.UnknownHostException; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; //import org.apache.commons.fileupload.*; //import org.apache.commons.fileupload.disk.DiskFileItemFactory; //import org.apache.commons.fileupload.servlet.ServletFileUpload; //import org.apache.commons.lang.time.DateUtils; import org.apache.log4j.Logger; //import org.apache.struts2.ServletActionContext; public class UploadFileServlet extends HttpServlet { private static Logger log = Logger.getLogger(UploadFileServlet.class); private static final String OBLIQUE_LINE = "/"; private static final String OPPOSITE_OBLIQUE_LINE = "////"; private static final String WEBPOSITION = "webapps"; private static final String SBPATH = "UploadedFiles/"; File outdir = null; File outfile = null; FileOutputStream fos = null; BufferedInputStream bis = null; byte[] bs = new byte[1024]; String uploadFName = null; String orderNo = null; String userId = null; String attachType = "2"; public void init() throws ServletException { // if (log.isDebugEnabled()) // { // log.debug("進入init()方法!!"); // } } public void doGet(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException { doPost(request, response); } public void doPost(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException { String root = this.getServletContext().getRealPath("/"); root = root.replaceAll("////", "/"); try { StringBuffer destFName = new StringBuffer(); destFName.append(getRealDir(root)).append(SBPATH); outdir = new File(destFName.toString()); request.setCharacterEncoding("UTF-8"); uploadFName = request.getParameter("filename"); //name of uploaded file uploadFName = request.getHeader("filename"); if (isEmpty(uploadFName)) uploadFName = "filename.jpg"; //orderNo = request.getParameter("orderno"); //id of the order or work sheet //userId = request.getParameter("userid"); //id of the user who upload the file //attachType = request.getParameter("attach_type"); //type of attachment, refer to file.FileBean's definition String desc = request.getParameter("desc"); //description of uploaded file if (desc==null) desc = ""; if (true) { destFName.append(getDatedFName(uploadFName)); outfile = new File(destFName.toString()); bis = new BufferedInputStream(request.getInputStream()); uploadFile(); //response.getWriter().write("0"); //success response.setHeader("resultcode", "0"); } else if (desc.length() > 400/2) { //response.getWriter().write("3"); //illegal description response.setHeader("resultcode", "3"); } else { if (log.isDebugEnabled()) { log.debug("調用格式錯誤!"); } response.sendError(100, "參數錯誤!"); //response.getWriter().write("1"); response.setHeader("resultcode", "1"); //parameter error //return; } } catch (SQLException e) { if (log.isDebugEnabled()) { log.debug(e); } //response.getWriter().write("6"); //failure of insert to database response.setHeader("resultcode", "6"); } catch (Exception e) { if (log.isDebugEnabled()) { log.debug(e); } //response.getWriter().write("7"); //failure response.setHeader("resultcode", "7"); } finally { if (null != bis) bis.close(); if (null != fos) fos.close(); } } private void uploadFile() throws IOException { if (log.isDebugEnabled()) { log.debug("outdir:" + outdir.getPath()); log.debug("outfile:" + outfile.getPath()); } if (!outdir.exists()) outdir.mkdir(); if (!outfile.exists()) outfile.createNewFile(); fos = new FileOutputStream(outfile); int i; while ((i = bis.read(bs)) != -1) { fos.write(bs, 0, i); } } public static String getDatedFName(String fname) { StringBuffer result = new StringBuffer(); SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss"); String dateSfx = "_" + df.format(new Date()); int idx = fname.lastIndexOf('.'); if (idx != -1) { result.append(fname.substring(0, idx)); result.append(dateSfx); result.append(fname.substring(idx)); } else { result.append(fname); result.append(dateSfx); } return result.toString(); } public static String getUrlFName(String fname, HttpServletRequest request) { String result = ""; if (isEmpty(fname)) return result; try { if (fname.startsWith("http://")) { result = fname; } else { //HttpServletRequest request = ServletActionContext.getServletContext().getRgetRequest(); //UserAndOrganAndRole user = (UserAndOrganAndRole)request.getSession().getAttribute("user"); String ip = request.getServerName(); int port = request.getServerPort(); result = fname.substring(fname.indexOf(UploadFileServlet.SBPATH)); StringBuffer tmpBuff = new StringBuffer(); tmpBuff.append("http://").append(ip).append(":").append(port).append(OBLIQUE_LINE).append(result); //Sample: http://localhost:8083/UploadedFiles/IMAGE_067_100222102521.jpg result = tmpBuff.toString(); } } catch (Exception ex) { ex.printStackTrace(); } System.out.println("result is: "+result); return result; } public static boolean isEmpty(String str) { return ((str == null) || (str.length() == 0)); } /** * Method getRealDir search webapps position * * @param despath * * @return * */ private String getRealDir(String newFileNameRoot) throws Exception { if (newFileNameRoot == null) throw new Exception("get real dir failed !"); int dp = newFileNameRoot .lastIndexOf(OBLIQUE_LINE); if (dp == -1) throw new Exception("invalid path !"); int dpbefore = newFileNameRoot.lastIndexOf( OBLIQUE_LINE, dp - 1); if (dpbefore == -1) throw new Exception("invalid path !"); String needSubStr = newFileNameRoot.substring(dpbefore + 1, dp); String nextStr = newFileNameRoot.substring(0, dpbefore + 1); if (!needSubStr.trim().equals(WEBPOSITION)) { return getRealDir(nextStr); } else return newFileNameRoot; } public static void main(String[] args) { } }
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Upload</servlet-name> <servlet-class>com.hemi.rhet.servlet.UploadFileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload</servlet-name> <url-pattern>/system/fileUpload</url-pattern> </servlet-mapping> </web-app>
更多關於Android相關內容感興趣的讀者可查看本站專題:《Android拍照與圖片處理技巧總結》、《Android開發入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
滾輪選擇控件Android自帶的選擇時間控件有點丑,往往產品和設計都比較嫌棄,希望做成ios一樣的滾輪選擇,下面是我在NumberPicker的基礎上自定義的選擇控件,效
前言最近在做按鈕的時候遇到在給按鈕設置一張圖片作為背景的同時還要自己定義圓角,最簡單的做法就是直接切張圓角圖作為按鈕就可以了,但是如果不這樣該怎麼辦呢,看代碼:下面來看效
一,IntelliJ 代碼檢查IntelliJ IDEA的具有強大,快速,靈活的靜態代碼分析。它可以檢測編譯器和運行時錯誤,提出改進和完善,甚至在編譯之前。代碼檢查基礎(
這是第一次寫博文,只是想找個地方積累一下自己覺得有用的,以後再次遇見這些問題的時候就可以更快的解決。描述一下這個問題的背景,一個日志,有文字和很多張圖片,以Recycle