Android:发送位图到PHP服务器会导致应用程序崩溃


Android: Sending a Bitmap to PHP server crashes the app

我想通过将图像转换为字符串将其发送到服务器。
下面是我的转换代码:

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;
        }

    }

我的应用程序可以成功地将数据发送到服务器,而不包含图像。
但是如果我在AsynTask中调用baseTo64,它会崩溃。这是因为使用了太多内存吗?我认为返回的字符串是如此之大,被发送到服务器,因为当我尝试使用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)

像下面的代码一样添加空检查

if(fileUri!=null)
{
     // do all relevant part here. 
}