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

url.openStream에서 그냥 넘어가요...

0 추천

디버깅을 해봤는데, url.openStream();여기서 그냥 지나가서 끝나버려요... 

어떻게 고쳐야 할까요ㅠ 

public void onClick(View v) {
					if(edemail.getText().toString().equals("")||edpwd.getText().toString().equals("")||edname.getText().toString().equals(""))
					{
						Toast.makeText(JoinActivity.this,
								"빈칸없이  입력하세요", Toast.LENGTH_SHORT).show();
						return;
					}
					runOnUiThread(new Runnable() {
						
						public void run() {
							String Email = edemail.getText().toString();
							String Pwd = edpwd.getText().toString();
							String Name = edname.getText().toString();
							
							try {
								URL url = new URL(SERVER_ADDRESS + "/insert.php?"
										+ "Email=" + URLEncoder.encode(Email, "UTF-8")
										+ "&Pwd=" + URLEncoder.encode(Pwd, "UTF-8")
										+ "&Name=" + URLEncoder.encode(Name, "UTF-8")); //변수값을 UTF-8로 인코딩하기 위해 URLEncoder를 이용하여 인코딩함
								url.openStream();
								String result =getXmlData("insertresult.xml","result");
								if(result.equals("1"))
								{
									Toast.makeText(JoinActivity.this,
											"DB insert 성공", Toast.LENGTH_SHORT).show();
							
									edemail.setText("");
									edname.setText("");
									edpwd.setText("");
								}
								else
								{
									Toast.makeText(JoinActivity.this,
											"DB insert 실패", Toast.LENGTH_SHORT).show();
								}
							}
								catch (Exception e) {
									Toast.makeText(JoinActivity.this,
											"DB insert 실패", Toast.LENGTH_SHORT).show();
								}
							
						}});
				}
			});

 

익명사용자 님이 2014년 7월 28일 질문

2개의 답변

0 추천
InputStream is = url.openStream();

스트림 객체를 리턴해주는데 받는 부분이 없네요.

받고나서 while 돌면서 데이터를 가지고 온 다음에 그 result 값을 파싱해야할듯요..
갸아악 (21,260 포인트) 님이 2014년 7월 28일 답변
파싱 부분 올렸습니다ㅠ
0 추천

죄송합니다 파싱하는 부분을 안올려 드렸네요ㅠ

 private String getXmlData(String filename, String str) {
	        	String rss = SERVER_ADDRESS + "/";
	    		String ret = "";
	    		try { //XML 파싱을 위한 과정
	    			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
	    			factory.setNamespaceAware(true);
	    			XmlPullParser xpp = factory.newPullParser();
	    			URL server = new URL(rss + filename);
	    			InputStream is = server.openStream();
	    			xpp.setInput(is, "UTF-8");
	    			
	    			int eventType = xpp.getEventType();
	    			
	    			while(eventType != XmlPullParser.END_DOCUMENT) {
	    				if(eventType == XmlPullParser.START_TAG) {
	    					if(xpp.getName().equals(str)) { //태그 이름이 str 인자값과 같은 경우
	    						ret = xpp.nextText();
	    					}
	    				}
	    				eventType = xpp.next();
	    			}
	    		} catch(Exception e) {
	    			Log.e("Error", e.getMessage());
	    		}
	    		
	    		return ret;
			}

 

익명사용자 님이 2014년 7월 28일 답변
url.openStream에서 그냥 지나가는게 맞습니다..
오픈 스트림을 왜 하는지가 궁금하네여
디버깅모드로 스텝오버 하면서 한스탭씩 가보세여
소스만 보고 얼추 짐작되는것은 처음 url.openStream()을 하면 서버쪽에 xml파일형태로 파일이 생성되고

바로 그 파일을 호출하여 파싱을 하려고 하는것 같은데요...



위의 상황이 맞다면 파일이 생성되기전에 호출을 해버려서 그냥 지나갔다고 생각이 되네요.



그냥 첫 url.openStream의 결과로 xml의 내용을 뿌려주고 그것을 바로 파싱하면 되지않나요?

파일로 만들어야만 하는 이유가 있다면 파일로 만들고 만들어진것에 대한 response를 얻어와서

파일이 확실히 존재한다는걸 확인한 뒤에 파싱하는 함수를 호출하면 될것 같습니다.
...