我正在開發一個android應用程序,該應用程序連接到php中的Web服務。用戶可以發送圖片,或者更好地說,將能夠發送圖片,因爲我被卡住了,給其他用戶。從Android中的Web服務中恢復base64圖像
現在,圖像通過類型爲xsd:base64binary的SOAP發送到Web服務。用戶拍照,並用數據字節數組被轉換成BASE64以這種方式發送之前:
String img;
....
@Override
public void onPictureTaken(byte[] data, Camera camera) {
img = Base64.encodeToString(data, Base64.NO_WRAP);
}
在服務器側,PHP存儲在MySQL BLOB列的img字符串。
當另一個用戶詢問圖片時,服務器從stdClass中檢索mysql中的數據,不僅是圖像,還有id,owner等等,並將所有這些數據封裝到帶有php函數的JSON字符串中json_encode。 WSDL文件中的返回類型是xsd:string。回到Android,我所做的是:
JSONArray array = new JSONArray(response);
JSONObject row;
String imgStr;
byte[] img;
for (int i = 0; i < array.length(); i++) {
row = array.getJSONObject(i);
...
imgStr = row.getString("image");
...
}
if (!TextUtils.isEmpty(imgStr)) {
img = Base64.decode(imgStr, Base64.NO_WRAP);
}
//Insert byte[] in android SQLite
dao.insert(id, owner, img);
SQLite中的表列類型也是BLOB。當我從SQLite獲取圖像並嘗試將其轉換爲Bitmap對象時,問題就出現了。造成這種情況的代碼:
...
byte[] img = cursor.getBlob(cursor.getColumnIndex(DB.M_IMG));
Bitmap bmp = BitmapFactory.decodeByteArray(img, 0, img.length);
...
的IMG字節數組似乎是正常的,但BMP總是空...
一些測試我做過發送之前所得到的圖像擁有者設備上的base64字符串它並將其傳遞給位圖以獲得良好結果,這就是爲什麼我認爲我的問題與編碼或通過json或php添加字符有關,我不知道...
更新:如果我硬編碼base64字符串從MySQL數據庫中,沒有創建位圖,如果我在拍攝照片的那一刻生成的base64字符串也一樣,那麼它就可以工作。
我在做什麼錯?
什麼是圖像類型?是BMP還是JPEF還是PNG? – varun 2013-05-08 16:11:39
該圖片沒有格式,它來自一個自定義的Camera Activity,並且該應用程序僅將字節數組存儲在SQLite中,因爲客戶端需求 – josecash 2013-05-08 16:18:28
請看這裏http://stackoverflow.com/questions/6520745/why-does-bitmapfactory-decodebytearray -return-null – varun 2013-05-08 16:24:12