package not.sy;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.HTMLElementName;
import net.htmlparser.jericho.MasonTagTypes;
import net.htmlparser.jericho.MicrosoftTagTypes;
import net.htmlparser.jericho.PHPTagTypes;
import net.htmlparser.jericho.Source;
class HtmlParser {
 ArrayList<NoticeList> arNotice;
 HtmlParser(){
  
 }
 public ArrayList getList(String sourceUrlString) {
  int index, indexEnd, hIndex, hIndexEnd;
  String str = null, strHref = null;
  //String sourceUrlString = "http://www.syu.ac.kr/aboard/board.asp?bidx=314&mode=list&page=";
  MicrosoftTagTypes.register();
  PHPTagTypes.register();
  PHPTagTypes.PHP_SHORT.deregister(); // remove PHP short tags for this
           // example otherwise they override
           // processing instructions
  MasonTagTypes.register();
  
  try{
  Source source = new Source(new URL(sourceUrlString));
  // Call fullSequentialParse manually as most of the source will be
  // parsed.
  source.fullSequentialParse();
  
  
  List rootList = source.getAllElements(HTMLElementName.A);
  for (Iterator it = rootList.iterator(); it.hasNext();) {
   Element linkElement = (Element) it.next();
   strHref += linkElement.getAttributeValue("href") + '\n';
   if (strHref == null)
    continue;
  }
  
  index = strHref.indexOf("board");
  indexEnd = strHref.indexOf('\n', index);
  
  String[] href = new String[50];
  
  for(int i=0; i<50; i++){
   href[i] = new String();
   if(i==0)
    href[i] = "http://www.xxx.ac.kr/aboard/" + strHref.substring(index, indexEnd);
   
   else{
    index = indexEnd+1;
    indexEnd = strHref.indexOf('\n', index);
    href[i] = "http://www.xxx.ac.kr/aboard/" + strHref.substring(index, indexEnd);
   }
  }
  
  
  
  
  
  str = source.getRenderer().setIncludeHyperlinkURLs(false).toString();
  
  
  
  arNotice = new ArrayList<NoticeList>();
  String num, title, hit, date;
  
  index = str.indexOf("공지");
  indexEnd = index+1;
  index = str.indexOf("공지", indexEnd);
  
  NoticeList nt;
  for (int i = 0; i < 50; i++) {
   nt = new NoticeList();
   
   if(i == 0){
    
    
    indexEnd = str.indexOf('\n', index);
    nt.num = str.substring(index, indexEnd-1);
   }
   else{
    index = indexEnd+3;
    indexEnd = str.indexOf('\n', index);
    nt.num = str.substring(index, indexEnd-1);
   }
   index = indexEnd+3;
   indexEnd = str.indexOf('\n', index);
   nt.title = str.substring(index, indexEnd-1);
   
   index = indexEnd+3;
   indexEnd = str.indexOf('\n', index);
   nt.hit = str.substring(index, indexEnd-1);
   
   index = indexEnd+3;
   indexEnd = str.indexOf('\n', index);
   nt.date = str.substring(index, indexEnd-1);
   
   nt.link = href[i].toString();
   
   arNotice.add(nt);
  }
  
  }catch(MalformedURLException e){
   e.getStackTrace();
  }catch(IOException e){
   e.getStackTrace();
  }
  
  return arNotice;
 }
 
 
 
 
 
 public String getContent(String sourceUrlString, String date){
  int index, indexEnd, hIndex, hIndexEnd;
  String str = null, result = "";
  MicrosoftTagTypes.register();
  PHPTagTypes.register();
  PHPTagTypes.PHP_SHORT.deregister(); // remove PHP short tags for this
           // example otherwise they override
           // processing instructions
  MasonTagTypes.register();
  
  try{
  Source source = new Source(new URL(sourceUrlString));
  source.fullSequentialParse();
  
  str = source.getRenderer().setIncludeHyperlinkURLs(false).toString().replace("\r","");
  index = str.indexOf(date);
  index += 10;
  result += str.substring(index);
  
  }catch(MalformedURLException e){
   e.getStackTrace();
  }catch(IOException e){
   e.getStackTrace();
  }
  
  return result;
 }
 
 public String getContentEuc(String sourceUrlString){
  int index, indexEnd, hIndex, hIndexEnd;
  String str = null, result = "";
  MicrosoftTagTypes.register();
  PHPTagTypes.register();
  PHPTagTypes.PHP_SHORT.deregister(); // remove PHP short tags for this
           // example otherwise they override
           // processing instructions
  MasonTagTypes.register();
  
  
  
  try{
  URL sUrl= new URL(sourceUrlString);
  InputStream is = sUrl.openStream();
  Source source=new Source(new InputStreamReader(is,"euc-kr"));
  source.fullSequentialParse();
  
  result = source.getRenderer().setIncludeHyperlinkURLs(false).toString();
  
  }catch(MalformedURLException e){
   e.getStackTrace();
  }catch(IOException e){
   e.getStackTrace();
  }
  
  return result;
 }
}
class NoticeList {
 String num, title, hit, date, link;
}



package not.sy;
import java.util.ArrayList;
import com.sy.*;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class Notice extends Activity {
 ArrayList<NoticeItem> arItem;
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.listtest);
  
  TextView topText = (TextView) this.findViewById(R.id.toptext);
  topText.setText("공지사항");
  
  HtmlParser parser = new HtmlParser();
  
  NoticeList nt = new NoticeList();
  String str = null;
  ArrayList<NoticeList> arNotice = parser.getList("http://xxxxx");
  
  arItem = new ArrayList<NoticeItem>();
  NoticeItem mi;
  for(int i=0; i<arNotice.size(); i++){
   nt = arNotice.get(i);
   mi = new NoticeItem(nt.num, nt.title, nt.date, nt.hit, nt.link);
   arItem.add(mi);
  }
  NoticeAdapter MyAdapter = new NoticeAdapter(this, R.layout.main_notice, arItem);
  ListView MyList;
  MyList = (ListView) findViewById(R.id.list);
  MyList.setAdapter(MyAdapter);
  MyList.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view,
     int position, long id) {
    // TODO Auto-generated method stub
    
    TabGroupActivity parentActivity = (TabGroupActivity)getParent();
    Intent intent = new Intent(getBaseContext(), not.sy.NoticeView.class);
    intent.putExtra("Url", arItem.get(position).Link);
    intent.putExtra("Date", arItem.get(position).Date);
    parentActivity.startChildActivity("NoticeView", intent);
   }
  });
 }
}
class NoticeItem {
 NoticeItem(String aNum, String aName, String aDate, String aHit, String aLink) {
  Num = aNum;
  Name = aName;
  Date = aDate;
  Hit = aHit;
  Link = aLink;
 }
 String Num;
 String Name;
 String Date;
 String Hit;
 String Link;
}
class NoticeAdapter extends BaseAdapter {
 Context maincon;
 LayoutInflater Inflater;
 ArrayList<NoticeItem> arSrc;
 int layout;
 public NoticeAdapter(Context context, int alayout, ArrayList<NoticeItem> aarSrc) {
  maincon = context;
  Inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  arSrc = aarSrc;
  layout = alayout;
 }
 @Override
 public int getCount() {
  return arSrc.size();
 }
 @Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return arSrc.get(position).Name;
 }
 @Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return position;
 }
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  final int pos = position;
  if (convertView == null) {
   convertView = Inflater.inflate(layout, parent, false);
  }
  TextView num = (TextView) convertView.findViewById(R.id.notice_num);
  num.setText(arSrc.get(position).Num);
  TextView title = (TextView) convertView.findViewById(R.id.notice_title);
  title.setText(arSrc.get(position).Name);
  
  TextView date = (TextView) convertView.findViewById(R.id.notice_date);
  date.setText("등록일 : " + arSrc.get(position).Date);
  
  TextView hit = (TextView) convertView.findViewById(R.id.notice_hit);
  hit.setText("조회수 : " + arSrc.get(position).Hit);
  return convertView;
 }
}
class MyView extends View{
 public MyView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
 }
 
 public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
 }
 
 public MyView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }
 
 public void init(){
  TextView tv = new TextView(getContext());
  tv.setText("asdfsadfsdxcvxzcvasdfqewrsdf");
  
 }
}




package not.sy;
import com.sy.*;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import net.htmlparser.*;
public class NoticeView extends Activity {
 String url, date, str;
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.notice_view);
  
  
  
  HtmlParser parser = new HtmlParser();
  
  Intent intent = getIntent();
  url = intent.getStringExtra("Url");
//  TextView tv = (TextView)findViewById(R.id.notice_view_text);
//  tv.setText(url);
  
  date = intent.getStringExtra("Date");
  
  if(url.indexOf("공지") != -1){
   int index, indexEnd;
   index = url.indexOf("공지");
   url = url.substring(0, index) + "%B0%F8%C1%F6";
  }
  
  str = parser.getContent(url, date);
  //str.trim();
  
  TextView tv = (TextView)findViewById(R.id.notice_view_text);
  tv.setText(str);
 }
 
 private ProgressDialog loadingDialog;
 void createThreadAndDialog(){
  loadingDialog = ProgressDialog.show(this, "로딩중...", "페이지 로딩중입니다", true, false);
  
  Thread thread = new Thread(new Runnable(){
   public void run(){
    handler.sendEmptyMessage(0);
   }
  });
  thread.start();
 }
 
 private Handler handler = new Handler(){
  public void handleMessage(Message msg){
   loadingDialog.dismiss();
   HtmlParser parser = new HtmlParser();
   
   Intent intent = getIntent();
   url = intent.getStringExtra("Url");
   TextView tv = (TextView)findViewById(R.id.notice_view_text);
   tv.setText(url);
   
   url = url.substring(0, url.length()-1);
   url = "http://www.xxxx";
   date = intent.getStringExtra("Date");
   
   if(url.indexOf("공지") != -1){
    int index, indexEnd;
    index = url.indexOf("공지");
    url = url.substring(0, index) + "%B0%F8%C1%F6";
   }
   
   str = parser.getContent(url, date);
   str.trim();
   
   TextView tv1 = (TextView)findViewById(R.id.notice_view_text);
   tv1.setText(str);
  }
 };
}



오류좀 봐주세요.ㅠㅠ
이건 로그입니다.
02-07 06:15:58.394: DEBUG/dalvikvm(429): GC_EXPLICIT freed 1288 objects / 69200 bytes in 207ms
02-07 06:16:05.163: INFO/ActivityManager(362): Starting activity: Intent { cmp=com.sy/.MenuTab }
02-07 06:16:06.374: INFO/ActivityManager(362): Displayed activity com.sy/.MenuTab: 1056 ms (total 1056 ms)
02-07 06:16:07.623: INFO/ActivityManager(362): Starting activity: Intent { cmp=com.sy/not.sy.Notice }
02-07 06:16:07.623: WARN/ActivityManager(362): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.sy/not.sy.Notice }
02-07 06:16:07.804: DEBUG/AndroidRuntime(687): Shutting down VM
02-07 06:16:07.804: WARN/dalvikvm(687): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
02-07 06:16:07.823: ERROR/AndroidRuntime(687): FATAL EXCEPTION: main
02-07 06:16:07.823: ERROR/AndroidRuntime(687): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sy/not.sy.Notice}: java.lang.NullPointerException
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.os.Looper.loop(Looper.java:123)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at java.lang.reflect.Method.invokeNative(Native Method)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at java.lang.reflect.Method.invoke(Method.java:521)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at dalvik.system.NativeStart.main(Native Method)
02-07 06:16:07.823: ERROR/AndroidRuntime(687): Caused by: java.lang.NullPointerException
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at not.sy.Notice.onCreate(Notice.java:40)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-07 06:16:07.823: ERROR/AndroidRuntime(687):     ... 11 more
02-07 06:16:07.854: WARN/ActivityManager(362):   Force finishing activity com.sy/not.sy.Notice
02-07 06:16:07.863: WARN/ActivityManager(362):   Force finishing activity com.sy/.MenuTab
02-07 06:16:08.364: WARN/ActivityManager(362): Activity pause timeout for HistoryRecord{43fde248 com.sy/not.sy.Notice}
02-07 06:16:09.823: INFO/Process(687): Sending signal. PID: 687 SIG: 9
02-07 06:16:09.866: INFO/ActivityManager(362): Process com.sy (pid 687) has died.
02-07 06:16:09.895: INFO/WindowManager(362): WIN DEATH: Window{43f74dd8 com.sy/com.sy.Intro paused=false}
02-07 06:16:09.904: INFO/WindowManager(362): WIN DEATH: Window{44019490 com.sy/com.sy.MenuTab paused=true}
02-07 06:16:10.023: INFO/UsageStats(362): Unexpected resume of com.android.launcher while already resumed in com.sy
02-07 06:16:10.195: WARN/InputManagerService(362): Got RemoteException sending setActive(false) notification to pid 687 uid 10049