Je veux télécharger une image dans mon creux de la base de données en l'encodant en base64-String.Pourquoi android studio dit-il que mon BufferedWriter est fermé?
Lorsque j'ai l'image et que j'appuie sur le bouton «upload», mon code le fait.
private void upLoadPicture()
{
class UploadImage extends AsyncTask<Bitmap,Void,String>
{
//ProgressDialog loading;
@Override
protected String doInBackground(Bitmap... args) {
RequestHandler rh = new RequestHandler();
Bitmap tempBitmap = args[0];
String tempImageString = ConvertBitMapToString(tempBitmap);
HashMap<String,String> map = new HashMap<String,String>();
map.put(UPLOAD_KEY, tempImageString);
rh.SendPostRequest(DATABASE_REQUEST_PATH, map);
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// loading = ProgressDialog.show(getApplicationContext(), "Uploading Image", "Please wait", true,true);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// loading.dismiss();
}
}
UploadImage Upi = new UploadImage();
Upi.execute(bitmap);
}
Et voici les méthodes et la classe qui suit
/*We store the picture in the database as a encoded 64-Base String so we need to encode it first*/
protected String ConvertBitMapToString(Bitmap bm)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
byte[] b = baos.toByteArray();
String tempString = Base64.encodeToString(b,Base64.DEFAULT);
return tempString;
}
Et ma classe qui devrait gérer le téléchargement
public class RequestHandler {
public void SendPostRequest(String url, HashMap<String,String> map)
{
String tempMessage,a = "";
HashMap<String,String> ImageHashmap = map;
try {
URL sendmeurl = new URL(url);
HttpURLConnection con = (HttpURLConnection) sendmeurl.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os = con.getOutputStream();
InputStream is = con.getInputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
bw.write(GetPOSTURL(ImageHashmap));
bw.flush();
bw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((tempMessage = br.readLine()) != null){
a = tempMessage;
}
Log.d("recieve", a);
con.disconnect();
} catch (Exception e){
e.printStackTrace();
}
}
private String GetPOSTURL(HashMap<String,String> MapPOST)
{
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : MapPOST.entrySet()) {
if (first)
first = false;
else
result.append("&");
try {
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
} catch (Exception e){
e.printStackTrace();
}
}
return result.toString();
}
Dans cette classe, je reçois une erreur que mon BufferedWriter est fermé avant que j'exécute ma méthode GetPOSTUrl()
et je ne sais pas pourquoi. Je ne suis pas sûr de savoir comment approfondir ce problème.
Modifier
Voici comment je reçois le bitmap
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) {
filepath = data.getData();
try {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},FETCH_PICTURE_REQUEST);
} catch (Exception e){
e.printStackTrace();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case FETCH_PICTURE_REQUEST:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filepath);
_IV.setImageBitmap(bitmap);
} catch(Exception e){
e.printStackTrace();
}
} else {
Toast.makeText(getApplicationContext(), "No Permission", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Et le Bitmap est juste dans ma classe
private Uri filepath;
private Bitmap bitmap;
Merci. Je perdais la tête par rapport à celui-ci. Je n'avais aucune idée que Inputstream se comportait de cette manière. – Bojje