현재 만들고있는 어플에서 아이디와 비밀번호를 쳐서 로그인을 하면 그 회원의 프로필 사진(파일이름)을 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 부분을 직접 파일이름을 타이핑 하면 또 됩니다. ㅠㅠ
도대체 왜그런거죠 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ