Мне нужно загрузить все мои изображения с моего телефона на сервер, но проблема в том, что я запускаю память с помощью Async.OutofMemory Android BitMap
Я видел много решений, где они просят пользователя сделать изображение меньше, но мне нужно, чтобы исходное изображение отправлялось не сжимать и не модифицировать.
Я попытался использовать Thread.sleep (5000);
Я также попытался следующие, но проблема это очистка моего Bitmap, прежде чем она загружена, так как это асинхронная
bm.recycle(); bm = null;
Есть в любом случае я могу загрузить изображение ONE BY ONE
@Override
protected void onCreate(Bundle savedInstanceState) {
picturePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()+"/Camera/";
Log.d("Files", "Path: " + picturePath);
File f = new File(picturePath);
File file[] = f.listFiles();
Log.d("Files", "Size: " + file.length);
for (int i=0; i < file.length; i++)
{
Log.d("Files", "FileName:" + file[i].getName());
// Image location URL
Log.e("Files", "----------------" + picturePath+file[i].getName());
// Image
Bitmap bm = BitmapFactory.decodeFile(picturePath + file[i].getName());
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 75, bao);
byte[] ba = bao.toByteArray();
ba1 = Base64.encodeToString(ba, Base64.DEFAULT);
Log.d("Files", "Uploading");
new uploadToServer().execute();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public class uploadToServer extends AsyncTask<Void, Void, String> {
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("base64", ba1));
nameValuePairs.add(new BasicNameValuePair("ImageName", System.currentTimeMillis() + ".jpg"));
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String st = EntityUtils.toString(response.getEntity());
Log.v("Files", "In the try Loop" + st);
} catch (Exception e) {
Log.v("Files", "Error in http connection " + e.toString());
}
return "Success";
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
, какие именно линии причины Недостаточно памяти ? – AterLux
Вы создаете растровое изображение под названием «bm», но вы ничего не делаете с ним ... вы в основном загружаете пустой массив байтов ... –
Вы не должны декодировать растровое изображение вообще - вы хотите загрузить файл, не отображать изображение. Используйте BufferedInputStream, который обертывает FileInputStream с целевым файлом - метод read (byte [] buffer, int byteOffset, int byteCount) позволяет вам писать в кусок сети. – npace