마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서버에서 이미지 받아오기가 잘안됩니다.

0 추천

현재 만들고있는 어플에서  아이디와 비밀번호를 쳐서 로그인을 하면 그 회원의 프로필 사진(파일이름)을 php웹상에 띄어 줍니다.

 

그걸 제가 어플로 받아서 String 변수에 저장을 시키고 그 변수(파일이름)를 이용해서 이미지를 받아오려고 했습니다.

 

이게 글도 받아와지고 이미지 자체도 받아와집니다. 따로따로 하면 되는데 같이하면 안됩니다.

 

서버주소/폴더명/직접 타이핑한 파일주소   이렇게 하면 그림을 불러 올수 있습니다.

 

그런데

 

서버주소/폴더명/서버에서 받아온 파일이름(String)값 변수를 넣으면 그림을 찾을수가 없다고 계속 뜹니다. 도대체 왜이런 걸까요 ㅠㅠ

 

 private class phpDown extends AsyncTask<String, Integer, String> { // 받아오기
 
@Override
protected String doInBackground(String... urls) {
// TODO Auto-generated method stub
StringBuilder jsonHtml = new StringBuilder();
try {
// 연결 url 설정
URL url = new URL(urls[0]);
// 커넥션 객체 생성
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
// 연결되었으면.
if (conn != null) {
conn.setConnectTimeout(5000);
 Log.e("conn111", "1ok");
conn.setUseCaches(false);
// 연결되었음 코드가 리턴되면.
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(),"UTF-8"));
for (;;) {
// 웹상에 보여지는 텍스트를 라인단위로 읽어 저장.
String line = br.readLine();
if (line == null)
break;
// 저장된 텍스트 라인을 jsonHtml에 붙여넣음
jsonHtml.append(line + "\n");
}
br.close();
}
conn.disconnect();
Log.e("conn111", "no");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return jsonHtml.toString();
}
 
protected void onPostExecute(String str) {
//img_str= str;
TxtView.setText("1 : "+str);
TxtView2.setText("2 : "+img_str);
 
 
downloadFile(imgUrl+str);
// task.execute(imgUrl+img_str);
 
Log.e("str", imgUrl+str);
Log.e("img_str", imgUrl+img_str);
}
 
}
 
이 클래스를 이용하여 서버에서 이미지 파일 이름을 가져옵니다. 
마지막 String Str 이 파일이름을 가지고 있습니다.
 
그 다음  
void downloadFile(String fileUrl) 
{
URL myFileUrl = null; // URL 타입의 myFileUrl을  NULL로 초기화 시켜줍니다. 
 
try
{
myFileUrl = new URL(fileUrl); //  파라미터로 넘어온 Url을 myFileUrl에 대입합니다.
 
}
catch(MalformedURLException e) // 예외처리를 해줍니다.
{
// Todo Auto-generated catch block
e.printStackTrace();
}
try
{
// 실질적인 통신이 이루어지는 부분입니다.
// myFileUrl 로 접속을 시도합니다. 
HttpURLConnection conn = (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength(); // 받아온 컨텐츠의 길이를 length 변수에 저장합니다.
InputStream is = conn.getInputStream(); // InputStream is 변수에 받아온 InputStream을 저장합니다.
 
bmImg = BitmapFactory.decodeStream(is); // 받아온 이미지를 bmImg에 넣어둡니다.
iv.setImageBitmap(bmImg); // imView에 이미지를 셋팅합니다.
 iv.setScaleType(ImageView.ScaleType.FIT_XY);
}
catch(IOException e) // 예외처리를 해줍니다.
{
e.printStackTrace(); 
}
}
이 함수를 이용하여 이미지를 다운 받아옵니다.
 
 
downloadFile(imgUrl+str); 이렇게 하는데 안됩니다. 저기 str 부분을 직접 파일이름을 타이핑 하면 또 됩니다. ㅠㅠ
 
도대체 왜그런거죠 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ
 
금색술 (500 포인트) 님이 2014년 10월 30일 질문

2개의 답변

0 추천
url encoding (parameter encoding) 에 대해서  찾아보세요
aucd29 (218,390 포인트) 님이 2014년 10월 30일 답변
바로 알아보겠습니다. 감사합니다
알아보니 파일 전송 중에 한글 때문에 그런가 의심하신것 같은데 파일명에 한글이 하나도 없습니다. 받아온 파일 이름을 콘솔창에 찍어봐도 타이핑한거랑 완전 똑같게 나오고요. 한글문제도 차후 해결해야겠지만 지금 이것은 아닌것같네요. 답변 감사합니다. ㅠㅠ 혹시 의심하신게 이걸 의심한게 아니라면 다시 한번 답변 달아주세요. 감사합니다.
java.io.FileNotFoundException: 이면 파일이 없는거 같은데요
폰에 ip 와 서버에서 사용되는 ip 가 동일 대역인지 확인하세요
동일한 ip 쓰고있고 직접 타이핑 하면 잘찾아와서 가져옵니다. ㅠㅠ
 task.execute(imgUrl+"2014-10-25_14_42_4006809_BG.jpg"); 이건 되고
 task.execute(imgUrl+str); 이건 안됩니다.
0 추천
서버에서 준 파일명이 다른거일 수도 있죠 ㅇㅇ

로그가 어떻게 나오나요 ?
갈무리 (12,430 포인트) 님이 2014년 10월 30일 답변
10-30 13:46:37.926: W/System.err(26589): java.io.FileNotFoundException: http://192.168.0.3/memberimg/2014-10-25_14_42_4006809_BG.jpg
10-30 13:46:37.926: W/System.err(26589):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
10-30 13:46:37.936: W/System.err(26589):     at com.tw2.HomeActivity$back.doInBackground(HomeActivity.java:349)
10-30 13:46:37.936: W/System.err(26589):     at com.tw2.HomeActivity$back.doInBackground(HomeActivity.java:1)
10-30 13:46:37.936: W/System.err(26589):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
10-30 13:46:37.936: W/System.err(26589):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-30 13:46:37.936: W/System.err(26589):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
10-30 13:46:37.936: W/System.err(26589):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-30 13:46:37.936: W/System.err(26589):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-30 13:46:37.936: W/System.err(26589):     at java.lang.Thread.run(Thread.java:841)


이렇게 뜹니다. 사진으로 올리려고 했는데 댓글은 그게 안되네요 ㅠㅠ
...