2014年11月17日 星期一

連線網頁,並取得網頁資訊範例



public class MainActivity extends Activity
{
private LinearLayout ll;
private Button btngo;

private TextView tv;
private ScrollView sv ;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ll = (LinearLayout) findViewById(R.id.LinearLayout1);
sv = new ScrollView(this);

tv = new TextView(this);
sv.addView(tv);

ll.addView(sv);
btngo = new Button(this);
ll.addView(btngo);
// ------------------------------------------
btngo.setText("go");
btngo.setOnClickListener(new Button.OnClickListener()
{

@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
                                //需使用Thread來執行網頁的存取需求,否則會產生錯誤
new Thread(new Runnable()
{

@Override
public void run()
{
// TODO Auto-generated method stub
connectHttp();
}
}).start();
}
});
// ------------------------------------------

}

private void connectHttp()
{
String url = "https://tw.stock.yahoo.com/q/q?s=2330"; //欲存取的網頁路徑
String output = null;
HttpPost request = new HttpPost(url);

Bundle b = new Bundle();
Message msg = new Message();

// 欺騙網站是pc傳送訊息
request.addHeader("User-Agent",
"Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1 Chrome/17.0.963.56");
List<NameValuePair> params = new ArrayList<NameValuePair>(); // 放參數
params.add(new BasicNameValuePair("s", "2330"));// 放參數
try
{
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse httpResponse = new DefaultHttpClient()
.execute(request);

if (httpResponse.getStatusLine().getStatusCode() == 200)
{
output = EntityUtils.toString(httpResponse.getEntity());

b.putString("value", output);
msg.setData(b);
// tv.setText(output);
handlerGS.sendMessage(msg);
}

} catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}

Handler handlerGS = new Handler()
{

@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle b = msg.getData() ;
tv.setText(b.getString("value"));

}

};
說明:關鍵在存取網路資訊時需使用Thread發送需求,否則會產生錯誤