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

xml파싱 데이터값을 어디서 가져와야 되나요??

0 추천

오픈 소스를 수정 하고 있는 중입니다.

vod를 구현 해보고 싶어서 만들고 있는데요

<one>
<item>
<title>타이틀</title>
<name>이름</name>
<datetime>2013-04-18</datetime>
<bible>성경</bible>
<movie>rtsp://localhost/1.mp4</movie>
<thumbnail>http://localhost/1.jpg</thumbnail>
</item>
</one>

위에껄 파싱을 하는데요

썸네일 까지 파싱을 해서 결과치는 정상으로 나옵니다.

그런데 movie 데이터를 어디서 가져와야될지 모르겠습니다.

main.java

AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
		// TODO Auto-generated method stub
		AlertDialog.Builder dialog = new AlertDialog.Builder(vod.this);
		dialog.setTitle("알려드립니다");
		dialog.setMessage("3G, 4G 사용 시 데이터 이용료가 부과될 수 있습니다");
		dialog.setPositiveButton("확인", new DialogInterface.OnClickListener(){
						
			public void onClick(DialogInterface arg0, int arg1) {
						
						
				String path = rtsp주소
				Intent i;
				try {
				 
				        i = Intent.parseUri(path, Intent.URI_INTENT_SCHEME);
				       		startActivity(i);
							} catch (URISyntaxException e) {
				        // TODO Auto-generated catch block
								e.printStackTrace();
							}
					}
				});
				dialog.setNegativeButton("취소", null);
				dialog.show();
				
        	}
        };

 

forecast.java

public class Forecast {
	public String title;
	public String datetime;
	public String bible;
	public String thumbnail;
	public String name;
	public String movie;
}

 

parser.java

public class Parser {
	private String TAG = "Parser";
	ArrayList<Forecast> parse;
	
	Parser() {
		parse = new ArrayList<Forecast>();
	}
	
	ArrayList<Forecast> parse() {
		try {
			String url = "http://localhost/search.php";
			URL targetURL = new URL(url);
			
			InputStream is = targetURL.openStream();
			
			//Parser
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			XmlPullParser parser = factory.newPullParser();
			
			parser.setInput(is, "utf-8");
		
			String tag;
			Forecast f = null;
			int parserEvent = parser.getEventType();
			while(parserEvent != XmlPullParser.END_DOCUMENT) {
				Log.d(TAG, "hi");
				switch(parserEvent) {
				case XmlPullParser.END_TAG:
					tag = parser.getName();
					Log.d(TAG, "END_TAG");
					if(tag.compareTo("item") == 0) {
						parse.add(f);
						Log.d(TAG, "/item");
					}
					break;
				case XmlPullParser.START_TAG:
					tag = parser.getName();
					Log.d(TAG, "START_TAG : " + tag);
					if(tag.compareTo("item") == 0) {
						f = new Forecast();
					} else if(f != null && tag.compareTo("title") == 0) {
						f.title = parser.nextText();
						Log.d(TAG, f.title);
						
					} else if(f != null && tag.compareTo("datetime") == 0) {
						f.datetime = parser.nextText();
						
					} else if(f != null && tag.compareTo("bible") == 0) {
						f.bible = parser.nextText();
						
					} else if(f != null && tag.compareTo("thumbnail") == 0) {
						f.thumbnail = parser.nextText();
						
					} else if(f != null && tag.compareTo("name") == 0) {
						f.name = parser.nextText();
										
					} else if(f != null && tag.compareTo("movie") == 0) {
						f.movie = parser.nextText();
					}
					break;
				}
				parserEvent = parser.next();
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return parse;		
	}
}

 

adapter.java

public class Adapter extends ArrayAdapter<Forecast> {
	private View v;
	private ViewHolder holder;
//	private Handler mHandler;

	public Adapter(Context context, int resource,
			List<Forecast> objects) {
		super(context, resource, objects);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		if (convertView == null) {
			LayoutInflater inflater = LayoutInflater.from(getContext());
			v = inflater.inflate(R.layout.listview, null);
			holder = new ViewHolder();
			holder.title = (TextView) v.findViewById(R.id.title);
			holder.datetime = (TextView) v.findViewById(R.id.datetime);
			holder.bible = (TextView) v.findViewById(R.id.bible);
			holder.name = (TextView) v.findViewById(R.id.name);
			holder.thumbnail = (ImageView) v.findViewById(R.id.thumbnail);
			
			v.setTag(holder);
		} else {
			v = convertView;
			holder = (ViewHolder) v.getTag();
		}

		final Forecast f = getItem(position);
		holder.title.setText(f.title);
		holder.datetime.setText(f.datetime);
		holder.bible.setText(f.bible);
		holder.name.setText(f.name);	
		new ImageAsync(holder.thumbnail).execute(f.thumbnail);
	
		return v;
	}
}

class ImageAsync extends AsyncTask<String, String, ImageView> {
	Bitmap bm;
	ImageView mImg;
	
	ImageAsync(ImageView img) {
		mImg = img;
	}

	@Override
	protected ImageView doInBackground(String... params) {
		try {
			URL url = new URL(params[0]);
			Log.d("TA", params[0]);
			URLConnection connection = url.openConnection();
			connection.connect();
			InputStream is = connection.getInputStream();
			BufferedInputStream bis = new BufferedInputStream(is);
			bm = BitmapFactory.decodeStream(bis);
			bis.close();
			is.close();
		} catch (IOException e) {
			// TODO: handle exception
		}
		return null;
	}
	
	@Override
	protected void onPostExecute(ImageView imgView) {
		mImg.setImageBitmap(bm);
	}
}

class ViewHolder {
	TextView title;
	TextView datetime;
	TextView bible;
	TextView name;
	ImageView thumbnail;
}

 

ㅎㅎ 소스 다 오픈 한거 같네요 저도

데이터 뽑아오는걸 공부를 하고 있는 상태에서 막상 뽑아보려니까

해깔리고 어렵고 잘 안되네요

프로그램의 흐름이 아직 이해가 잘 안되는거 같습니다.

 

parser.java에서 찾아봐야되나요??

혹시 여기서 리스트뷰 더보기 추가하려면 어떤식으로 해야되나요???

능력자 (390 포인트) 님이 2013년 4월 19일 질문

2개의 답변

+1 추천
 
채택된 답변

 

onItemClick(AdapterView<?> parent, View view, int position,long id)
 
의 position 이 배열의 인덱스니 
 
public Adapter(Context context, int resource,
 
            List<Forecast> objects) {
        super(context, resource, objects);
    }
선언해준 배열에서get(position ) 하시면 됨...
지구정복단 (1,380 포인트) 님이 2013년 4월 19일 답변
능력자님이 2013년 4월 21일 채택됨
감사합니다.. 좀 이해는 되는데 알송달송하는 부분이 많아 또 질문 올렸어요^^
0 추천
xml 내용을 보면 저건 단순 더미 데이터 입니다.

해당 mp3 를 가져오려면 rstp 를 지원하는 서버가 필요하고 서버의 정보를 localhost 에서 서버 도메인으로 변경이 필요 합니다.
aucd29 (218,390 포인트) 님이 2013년 4월 19일 답변
더미 데이터를 그냥 String path = 에 집어 넣기면 하면되는데
그게 안되네요.
서버는 rtsp지원을 하게 세팅이 되어 있는 상태 입니다.
localhost는 주소를 가리기 위해 바꾼겁니다.
...