Привет,Android: загрузить фото
У меня возникли проблемы с загрузкой фотографии с моего телефона на Android. Вот код, я использую, чтобы предложить пользователю выбрать фотографию:
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?
}
}
}
Так я имею Bitmap б, однако я не знаю, что делать дальше?
У меня есть следующий код для отправки запросов 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);
Как я могу подключить растровое изображение к этому? Я искал google целую вечность и не могу найти хороший способ сделать это.
Я надеюсь, что кто-то может помочь.
Большое спасибо заранее,
Ok Я попытался предложение Чираг шаха. Вот мой код:
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);
}
}
где функция пост (как рекомендуется):
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();
}
}
Однако myurl.com/ajax/uploadPhoto.php получает ничего. Я создал журнал PHP для регистрации любой активности на uploadPhoto.php, и ничего не появляется. Стоит отметить, что если я просто напечатаю myurl.com/ajax/uploadPhoto.php прямо в веб-браузере, он регистрируется в порядке.
Другие предложения?
Большое спасибо,
Я нашел что http-сообщения должны выполняться из задачи Async, иначе они просто не произойдут. Я смотрел на то, чтобы делать что-то похожее как на публикацию, так и на получение данных, а также для того, чтобы обернуть сообщения в URL-адрес в async-задаче. (http://developer.android.com/reference/android/os/AsyncTask.html) – Tim