我正在尝试制作一个 android 应用程序,我可以在其中从图库中拍摄或选择 2 张照片并将它们发送到服务器。编码:
private static final int SELECT_PICTURE = 1;
private String selectedImagePath;
private int TAKE_PHOTO_CODE = 0;
private Uri outputFileUri;
public void getit() {
Intent intentpic= new Intent();
intentpic.setAction(Intent.ACTION_GET_CONTENT);
intentpic.setType("image/*");
startActivityForResult(Intent.createChooser(intentpic, "Select Picture"), SELECT_PICTURE);
}
public void takepic() {
final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/IDandCCD/";
File newdir = new File(dir);
newdir.mkdirs();
String file="";
if(but.equals(3)) {
file = dir+"ID"+".jpg";
}
else if(but.equals(4)) {
file = dir+"CCD"+".jpg";
}
File newfile = new File(file);
try {
newfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
outputFileUri = Uri.fromFile(newfile);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
//selectedImagePath = selectedImageUri.getPath()+".jpg";
if(but.equals(1)) {
id.setText(selectedImagePath);
}
else if(but.equals(2)) {
ccd.setText(selectedImagePath);
}
}
else if(requestCode == TAKE_PHOTO_CODE) {
String fname = outputFileUri.getPath();
if(but.equals(3)) {
id.setText(fname);
}
else if(but.equals(4)) {
ccd.setText(fname);
}
}
}
}
@SuppressWarnings(value = { "deprecation" })
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if(cursor!=null)
{
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
private class MyAsyncTask extends AsyncTask<String, Void, String> {
ProgressDialog pro1;
protected void onPostExecute(String result) {
pro1.dismiss();
}
@Override
protected void onPreExecute() {
pro1 = ProgressDialog.show(ThirdStep.this, "Loading", "Please wait");
}
@Override
protected String doInBackground(String... params) {
String hdfgs="tgabvds";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
String responseStr=null;
try {
MultipartEntity entity = new MultipartEntity();
FileBody pic1=new FileBody(new File(id.getText().toString()));
FileBody pic2=new FileBody(new File(ccd.getText().toString()));
entity.addPart("idpic", pic1);
entity.addPart("ccdpic", pic2);
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity=response.getEntity();
responseStr=resEntity.toString();
} catch (Exception e) {
Log.e("Debug", "error: " + e.getMessage(), e);
}
return responseStr;
}
}
但是我遇到了一个问题:
08-20 12:45:20.409: D/dalvikvm(2235): DexOpt: couldn't find static field Lorg/apache/http/message/BasicHeaderValueParser;.INSTANCE
08-20 12:45:20.409: W/dalvikvm(2235): VFY: unable to resolve static field 2667 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueParser;
08-20 12:45:20.482: D/dalvikvm(2235): VFY: replacing opcode 0x62 at 0x001b
08-20 12:45:20.502: D/dalvikvm(2235): DexOpt: couldn't find static field Lorg/apache/http/message/BasicHeaderValueFormatter;.INSTANCE
08-20 12:45:20.528: W/dalvikvm(2235): VFY: unable to resolve static field 2661 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueFormatter;
08-20 12:45:20.528: D/dalvikvm(2235): VFY: replacing opcode 0x62 at 0x0015
08-20 12:45:22.618: D/dalvikvm(2235): GREF has increased to 201
起初我以为是因为 MultipartEntity 的导入 jar,但我将它们放在项目的 libs 文件夹中,它们出现在 Android Private Libraries 中。添加它们后,我刷新并清理了项目。我在 Eclipse 中这样做,当我在模拟器中启动应用程序时,我可以拍照,我可以从手机中选择一张照片,但是当我尝试上传它时,我得到了错误。如果有人有建议,我将不胜感激。
PS我没有忽略它,只是我还没有对结果做任何事情。