base64-string으로 인코딩하여 DB 함으로 이미지를 업로드하고 싶습니다.android studio에서 내 BufferedWriter가 닫히지 않는다고 말하는 이유는 무엇입니까?
이미지가 있고 "업로드"버튼을 누르면 내 코드가이를 수행합니다.
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);
}
그리고 여기이 클래스에서 업로드
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();
}
을 처리해야
/*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;
}
그리고 내 클래스를 다음 방법과 클래스 내의 BufferedWriter가 닫혀 오류가 있습니다 내 방법 GetPOSTUrl()
을 실행하기 전에 왜 그런지 모르겠습니다. 이 문제에 대해 더 깊이 파고 드는 방법을 모르겠습니다. 내가 비트 맵을
@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);
}
}
을받는 방법은 다음과
편집
은 비트 맵은 오늘 같은 문제가 있었다 단지 내 수업
private Uri filepath;
private Bitmap bitmap;
감사합니다. 이걸로 내 머리를 잃어 가고 있었어. Inputstream이 그런 식으로 행동했는지 전혀 몰랐습니다. – Bojje