Я работаю над проектом в Android, где я хочу загружать и загружать изображения в / из базы данных SQL.
Я могу отлично загрузить свои фотографии к нему. Я делаю фотографию, преобразовываю это в растровое изображение. Это растровое изображение я могу преобразовать в строку. Эта строка, которую я отправляю в веб-службу, чтобы поместить ее в базу данных SQL (этот тип имеет тип BLOB).
Я вижу в своем SQL такие вещи, как «BLOB-36,7 КБ». Поэтому я думаю, что загрузка прошла успешно.
Но когда я хочу загрузить изображение, оно идет не так.
Поскольку я отправил это как строку, я могу также получить как строку.
Строка, которую я получаю, похожа (используется Log.d): /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
Когда я преобразовываю это со следующим кодом в растровое изображение, это идет не так.
public Bitmap StringToBitMap(String encodedString){
try{
byte [] encodeByte= Base64.decode(encodedString, Base64.DEFAULT);
Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
return bitmap;
}catch(Exception e){
e.getMessage();
return null;
}
}
Я получаю следующую ошибку:
D/skia: --- decoder->decode returned false
Так что я думаю, что с преобразованием что-то не так.
Я не знаю что, потому что строка, которую я получаю, такая короткая, я думаю, что я не могу получить всю строку?
Я понятия не имею, как это исправить.
Это код моего веб-сервиса.
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
$number = $_POST['data'];$sql ="SELECT Image FROM images WHERE Number=".$number;
$result= mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
$image = $row["Image"];
}
}
print($image);
}
Это код моего приложения, чтобы получить изображение.
private void getImage() {
class GetImage extends AsyncTask<String,Void,String>{
ProgressDialog loading;
RequestHandler rh = new RequestHandler();
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(PhotoViewer.this, "Uploading...", null,true,true);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Bitmap bitmap = StringToBitMap(s);
imageView.setImageBitmap(bitmap);
}
@Override
protected String doInBackground(String... params) {
String param = params[0];
Log.d(TAG,param);HashMap<String,String> data = new HashMap<>();
data.put("data", param);
String result = rh.sendPostRequest(DOWNLOAD_URL,data);
Log.d(TAG,result);
return result;
}
}
GetImage gi = new GetImage();
gi.execute(place.getFotoNumber());
}
public class RequestHandler{
public String sendPostRequest(String requestURL,HashMap<String, String> postDataParams) {
URL url;
String response = "";
try {
url = new URL(requestURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
response = br.readLine();
} else {
response = "Error Registering";
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
}
Я надеюсь, что вы, ребята, можете мне помочь.
Спасибо,
StijnB
Задача ещё не решена.
Других решений пока нет …