本文实例讲述了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程序设计有所帮助。
本文地址:https://www.stayed.cn/item/21303
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我