Android: отправка растрового изображения на сервер PHP приводит к сбою приложения

Я хочу отправить изображение на сервер, преобразовав его в строку.
Вот мой код для конвертации:

public String baseTo64 (Bitmap bitmapImage){
String imageString = null;
try {

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
imageString = Base64.encodeToString(b, Base64.DEFAULT);

} catch (Exception e) {
e.printStackTrace();
}

return imageString;
}

Я использую AyncTask для отправки строки вместе с другими строками.

class SubmitReport extends AsyncTask<String, String, String> {

protected String doInBackground(String... args) {

String image = baseTo64(bitmapImage);
String desc =  text2.getText().toString();
r.setType(rg.indexOfChild(findViewById(rg.getCheckedRadioButtonId())));
String type = r.getType();
String latitude = String.valueOf(r.getLati());
String longitude = String.valueOf(r.getLongi());
String dateH = r.getStringDate();

// Building Parameters
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("image", image));
params.add(new BasicNameValuePair("desc", desc));
params.add(new BasicNameValuePair("type", type));
params.add(new BasicNameValuePair("latitude", latitude));
params.add(new BasicNameValuePair("longitude", longitude));
params.add(new BasicNameValuePair("dateH", dateH));

// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_submit_report, "POST", params);

// check log cat fro response
Log.d("Create Response", json.toString());

// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);

if (success == 1) {
// success

Log.d("SUCCESS", json.toString());

// closing this screen
// finish();
} else {
// failed
Log.d("FAILED", json.toString());

}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}


}

Мое приложение может успешно отправлять данные на сервер, не включая изображение.
Но если я вызываю baseTo64 внутри AsynTask, он вылетает.
Это из-за слишком большого количества используемой памяти? Я думаю, что возвращаемая строка настолько велика, что ее нужно отправить на сервер, потому что, когда я пытаюсь использовать метод baseTo64 и отображать его с помощью тоста, используя только первые 5 символов, он отображает символы.

Если это так, что я буду делать, чтобы предотвратить / избежать этого? Пожалуйста помоги.

07-24 13:32:47.836  26033-27529/com.example.jay.curloc E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #3
Process: com.example.jay.curloc, PID: 26033
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.example.jay.curloc.ReportIncident$SubmitReport.doInBackground(ReportIncident.java:455)
at com.example.jay.curloc.ReportIncident$SubmitReport.doInBackground(ReportIncident.java:417)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

0

Решение

Добавьте нулевую проверку, как показано ниже.

if(fileUri!=null)
{

// do all relevant part here.
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector