任何指向学习此主题的好链接,例如博客或教程
我已经审阅了这个link
MainActivity.java
public class MainActivity extends Activity {
Button submit, uplodbtn;
EditText name, City;
ProgressDialog pDialog;
ImageView iv;
private Bitmap bitmap;
private static final int PICK_IMAGE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
submit = (Button) findViewById(R.id.SUBMIT_BUTTON_ID);
name = (EditText) findViewById(R.id.NAME_EDIT_TEXT_ID);
City = (EditText) findViewById(R.id.CITY_EDIT_TEXT_ID);
iv = (ImageView) findViewById(R.id.imageView1);
uplodbtn = (Button) findViewById(R.id.button1);
submit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new MainTest().execute();
// }
}
});
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
selectImageFromGallery();
}
});
uplodbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new ImageUploadTask().execute();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
decodeFile(picturePath);
}
}
public void decodeFile(String filePath) {
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, o);
// The new size we want to scale to
final int REQUIRED_SIZE = 1024;
// Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmap = BitmapFactory.decodeFile(filePath, o2);
iv.setImageBitmap(bitmap);
}
public void selectImageFromGallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
PICK_IMAGE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void postData() {
// Create a new HttpClient and Post Header
// You can use NameValuePair for add data to post server and yes you can
// also append your desire data which you want to post server.
// Like:
// yourserver_url+"name="+name.getText().toString()+"city="+City.getText().toString()
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("Your Server URL");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("Name", name.getText()
.toString()));
nameValuePairs.add(new BasicNameValuePair("city", City.getText()
.toString()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
Log.v("Response", response.toString());
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
public class MainTest extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading..");
pDialog.setIndeterminate(true);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
postData();
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// data=jobj.toString();
pDialog.dismiss();
}
}
class ImageUploadTask extends AsyncTask<Void, Void, String> {
private String webAddressToPost = "http://your-website-here.com";
// private ProgressDialog dialog;
private ProgressDialog dialog = new ProgressDialog(MainActivity.this);
@Override
protected void onPreExecute() {
dialog.setMessage("Uploading...");
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(webAddressToPost);
MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
String file = Base64.encodeToString(data, 0);
entity.addPart("uploaded", new StringBody(file));
entity.addPart("someOtherStringToSend", new StringBody(
"your string here"));
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost,
localContext);
BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse = reader.readLine();
return sResponse;
} catch (Exception e) {
// something went wrong. connection with the server error
}
return null;
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
Toast.makeText(getApplicationContext(), "file uploaded",
Toast.LENGTH_LONG).show();
}
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="24dp"
android:layout_marginTop="32dp"
android:clickable="false"
android:src="@drawable/ic_launcher" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/imageView1"
android:text="Click to upload Image"
android:textSize="15dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/NAME_EDIT_TEXT_ID"
android:layout_alignParentLeft="true"
android:clickable="false"
android:text="NAME"
android:textSize="20dp"
android:textStyle="bold" />
<EditText
android:id="@+id/NAME_EDIT_TEXT_ID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/CITY_EDIT_TEXT_ID"
android:layout_alignRight="@+id/button1"
android:layout_marginBottom="30dp"
android:ems="10" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/CITY_EDIT_TEXT_ID"
android:layout_alignLeft="@+id/textView2"
android:clickable="false"
android:text="CITY"
android:textSize="20dp"
android:textStyle="bold" />
<EditText
android:id="@+id/CITY_EDIT_TEXT_ID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/NAME_EDIT_TEXT_ID"
android:layout_centerVertical="true"
android:ems="10" />
<Button
android:id="@+id/SUBMIT_BUTTON_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_alignParentBottom="true"
android:layout_marginBottom="47dp"
android:text="SUBMIT" />
</RelativeLayout>
我还有博客中提到的 Base64.java 类
我有错误 ::
entity.addPart("uploaded", new StringBody(file));
entity.addPart("someOtherStringToSend", new StringBody("your string here"));
String body无法解析为类型
MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE);
无法将多部分实体解析为类型
Description Resource Path Location Type
Project 'DataPostingProject' is missing required library: 'C:\Users\admin\Downloads\httpmime-4.1-beta1.jar\httpmime-4.1-beta1.jar' DataPostingProject Build path Build Path Problem
我如何纠正自己
答案 0 :(得分:2)
这是在onCreate:
Button camera = (Button)findViewById(R.id.btnCamera);
camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
});
外面的创建:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
Log.d("photo", photo.toString());
String s= BitMapToString(photo);
Toast.makeText(Home.this, s, Toast.LENGTH_LONG).show();
Log.e("e", s);
new ProgressBarshowNew().execute(s);
/* ByteArrayOutputStream stream = new ByteArrayOutputStream();
//photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
// imageView.setImageBitmap(photo);
*/ }
}
现在asyn任务:
class ProgressBarshowNew extends AsyncTask<String, String, String> {
private ProgressDialog pdia;
@Override
protected void onPreExecute() {
super.onPreExecute();
pdia = new ProgressDialog(getParent());
pdia.setMessage("Loading...");
pdia.show();
}
@SuppressLint("NewApi")
@Override
protected String doInBackground(String... f_url) {
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT > 8) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
// ssl code
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://"+getResources().getString(R.string.url)+"/Driver/GetDriverId");
httpPost.setHeader("content-type", "application/json");
JSONObject data = new JSONObject();
SharedPreferences prfs = getSharedPreferences("SPFILE", Context.MODE_PRIVATE);
String USER_ID = prfs.getString("USER_ID", "");
if(USER_ID.equals(""))
{
Log.d("User Id not found", "User Id not found");
}
else
{
//Toast.makeText(DriverId.this,regId, Toast.LENGTH_LONG).show();
try {
data.put("Image", f_url[0].toString());
data.put("UserId",USER_ID);
Log.e("Josn", data.toString());
StringEntity entity = new StringEntity(data.toString());
httpPost.setEntity(entity);
HttpResponse hresponse = client.execute(httpPost);
code = hresponse.getStatusLine().getStatusCode();
responseString = EntityUtils.toString(hresponse
.getEntity());
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(code==200){
return responseString;
}
else{
return null;
}
}
@Override
protected void onPostExecute(String file_url) {
try {
pdia.dismiss();
pdia = null;
} catch (Exception e) {
}
}
}
功能:
public String BitMapToString(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String strBitMap = Base64.encodeToString(b, Base64.DEFAULT);
return strBitMap;
}
服务器端:( C#):
public static BitmapImage base64image(string base64string)
{
byte[] fileBytes = Convert.FromBase64String(base64string);
using (MemoryStream ms = new MemoryStream(fileBytes))
{
Image streamImage = Image.FromStream(ms);
context.Response.ContentType = "image/jpeg";
streamImage.Save(context.Response.OutputStream, ImageFormat.Jpeg);
return streamImage;
}
}
答案 1 :(得分:2)
这是因为您缺少Multipart Entity Jar文件.....
将 httpmime 4.0.1 jar文件添加到您的项目中.....
将此文件添加到您的项目中.....
右键单击项目 - &gt; 属性 - &gt; Android Java构建路径 - &gt; 添加外部Jar - &gt; 在jar文件的选择路径之后 - &gt; 终于好了。