Chúc mừng,Android: tải lên ảnh
Tôi gặp sự cố khi tải ảnh lên từ điện thoại Android của mình. Đây là mã tôi đang sử dụng để nhắc người dùng chọn ảnh:
public class Uploader{
public void upload(){
Log.i("EOH","hi...");
Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
Bundle extras = data.getExtras();
Bitmap b = (Bitmap) extras.get("data");
//what do do now with this Bitmap...
//how do I upload it?
}
}
}
Vì vậy, tôi có Bitmap b, tuy nhiên tôi không biết phải làm gì tiếp theo?
Tôi có đoạn code sau đây để gửi yêu cầu POST:
List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("someValA", String.valueOf(lat)));
params.add(new BasicNameValuePair("someValB", String.valueOf(lng)));
new HttpConnection(handler).post("http://myurl.com/upload.php",params);
Làm thế nào tôi có thể treo lên một hình ảnh Bitmap này? Tôi đã tìm kiếm google cho lứa tuổi và không thể tìm thấy một cách tốt để làm điều đó.
Tôi hy vọng ai đó có thể trợ giúp.
Nhiều cảm ơn trước,
Ok Tôi đã thử gợi ý Chirag shah của. Đây là mã của tôi:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
Uri imageUri=data.getData();
List<NameValuePair> params = new ArrayList<NameValuePair>(1);
params.add(new BasicNameValuePair("image", imageUri.getPath()));
post("http://www.myurl.com/ajax/uploadPhoto.php",params);
}
}
nơi bài function (theo khuyến cáo) là:
public void post(String url, List<NameValuePair> nameValuePairs) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
try {
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int index=0; index < nameValuePairs.size(); index++) {
if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
// If the key equals to "image", we use FileBody to transfer the data
entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
}else{
// Normal string data
entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
Log.i("EOH",response.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
Tuy nhiên myurl.com/ajax/uploadPhoto.php là nhận được gì cả. Tôi đã tạo một bản ghi PHP để đăng nhập bất kỳ hoạt động nào trên uploadPhoto.php và không có gì hiển thị. Cần lưu ý rằng nếu tôi chỉ nhập myurl.com/ajax/uploadPhoto.php vào trình duyệt web, nó sẽ ghi nhật ký tốt.
Mọi đề xuất khác?
Rất cám ơn,
tôi đã tìm thấy rằng các bài viết http phải được thực hiện từ một tác vụ Async nếu không chúng sẽ không xảy ra. Tôi đã xem xét việc làm một cái gì đó tương tự như đăng và nhận dữ liệu và cần thiết để bọc các bài viết vào url trong một nhiệm vụ không đồng bộ. (http://developer.android.com/reference/android/os/AsyncTask.html) – Tim