안녕하세요..
안드로이드 어플리케이션 개발 중입니다!
안드로이드->jsp로 multipart를 이용하여 서버에 이미지를 저장하려고 합니다..
그런데 안드로이드->jsp로 multipart를 이용하여 이미지 전송과 저장은 되는데
jsp의 xml을 안드로이드에서 파싱(jdom)하는 부분에서 자꾸 오류가 발생합니다.. 원일을 아무리 찾아도 안나오네요ㅠㅠ
org.xml.sax.SAXParseException: Unexpected token (position:TEXT ë¤ì�� 경로에 파일이 저...@2:1 in java.io.InputStreamReader@430280e0)
로그캣 오류 정보입니다ㅠㅠ
try {
username = new String(username.getBytes("UTF-8"),
"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
createQRCode(userid + "/" + userid);
URL url = new URL("http://192.168.1.2:8085/Paser/join.jsp");
String boundary = "SpecificString";
URLConnection con = url.openConnection();
((HttpURLConnection) con).setRequestMethod("POST");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
con.setDoOutput(true);
// 이미지 생성
//문자열 전송 시작 키 // 변수
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"userid\"\r\n\r\n" + userid);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"userpwd\"\r\n\r\n" + userpwd);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"username\"\r\n\r\n" + username);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"userhp\"\r\n\r\n" + userhp);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"useremail\"\r\n\r\n" + useremail);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"userbirth\"\r\n\r\n" + userbirth);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"usergender\"\r\n\r\n" + genderStr);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"usermode\"\r\n\r\n" + modeStr);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"userqr\"\r\n\r\n" + fos);
wr.writeBytes("\r\n--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"userqr\"; filename=\"image.jpg\"\r\n");
wr.writeBytes("Content-Type: application/octet-stream\r\n\r\n");
Log.i("xml parseraaaaaa", "testdir/" + testdir);
FileInputStream fileInputStream = new FileInputStream("/storage/emulated/0/MobilID/QRCODE.jpg");
//FileInputStream fileInputStream = new FileInputStream(testdir);
int bytesAvailable = fileInputStream.available();
int maxBufferSize = 1024;
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0)
{
// Upload file part(s)
DataOutputStream dataWrite = new DataOutputStream(con.getOutputStream());
dataWrite.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
fileInputStream.close();
wr.writeBytes("\r\n--" + boundary + "--\r\n");
wr.flush();
InputStream is = con.getInputStream();
// 파서 공장 생성
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
// 파서 생성
Log.i("xml parserddddddddd", "testdir/" + is);
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(is);
Log.i("xml parserfffffff", "testdir/" + is);
// 문서에서 result, msg태그 중 0번째 요소를 반환
Element resultTag = (Element) document.getElementsByTagName("result").item(0);
Log.i("xml parser", "rtncode/" + rtncode);
Element msgTag = (Element) document.getElementsByTagName("msg").item(0);
// result, msg 태그의 첫번째 자식은 TEXT노드, getNodeValue() 메서드를 이용하여서
// 텍스트값 추출
rtncode = resultTag.getFirstChild().getNodeValue();
msg = msgTag.getFirstChild().getNodeValue();
Log.i("xml parser", "rtncode/" + rtncode);
Log.i("xml parser", "msg/" + msg);
} catch (Exception e) {
Log.e("Xml1", "예외 발생", e);
e.printStackTrace();
}
if (rtncode.equals("200")) {
// createQRCode(userid+"/"+userid);
Toast.makeText(UserJoin.this, "등록이 완료 되었습니다.",
Toast.LENGTH_SHORT).show();
Intent in = new Intent(UserJoin.this, LoginActivity.class);
startActivity(in);
}
// /////////////////////////////////////////////////
// Toast.makeText(UserJoin.this, "회원가입 되었을까요?",
// Toast.LENGTH_SHORT).show();
break;
case R.id.can:
Toast.makeText(UserJoin.this, "뒤로가기", Toast.LENGTH_SHORT)
.show();
finish();
}
}
안드로이드 소스입니다ㅠㅠ
Document document = new Document();
//root 노드 생성
Element root = new Element("join");
document.setRootElement(root);
//<result> 엘리먼트 생성
Element element = new Element("result");
//노드에 내용 추가
element.addContent(rtncode);
//노드를 root에 추가
root.addContent(element);
//<msg> 엘리먼트 생성
element = new Element("msg");
element.addContent(msg);
root.addContent(element);
System.out.println(msg+"//////"+rtncode);
//JDOM 문서를 바이트 문자열로 출력
XMLOutputter outputter = new XMLOutputter();
outputter.setFormat(Format.getPrettyFormat());//추가
//Format f = outputter.getFormat();
//f.setEncoding("UTF-8");
String returnxml = outputter.outputString(document);
%>
jsp 소스입니다..
오류 위치를 찾아보니 안드로이드의
Document document = parser.parse(is);
이 부분에서 오류가 발생합니다ㅠㅠ..왜 이럴까요??
setrequestproperty의 값이 multipart/form이라서 받아오는 게 xml이라서 안되는 것인지 잘 모르겠네요ㅠㅠㅠ
부탁드립니다ㅠㅠ