要和後臺進行通訊網絡
一開始發現接不到數據ide
後來發生了線程錯誤url
在網上查到:在一些高版本中,與網絡通訊的操做由於要花費比較大的時間,因此應該放在單獨的線程中去作。spa
但爲何一些網上demo沒有放在單獨的線程中呢?由於那些例子是基於低版本的,低版本不強制要求這麼作。線程
至於線程,由於要改變主UIcode
用到handler,簡單的業務邏輯就是:blog
0.寫好handler的內部操做事件
1.觸發事件get
2.進入新的線程it
3. 將想返回的信息交給meeage,由handler.sendMessage(message)傳回
4.進入handler操做,寫入主UI
下面是代碼:
public class MainActivity extends ActionBarActivity { Button urlBtn ; TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); urlBtn = (Button)findViewById(R.id.btn1); text=(TextView)findViewById(R.id.textView); urlBtn.setOnClickListener(myClick); } public Handler handler = new Handler(){ public void handleMessage(Message msg){ text.setText(msg.obj.toString()); } }; public View.OnClickListener myClick = new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { urlGet(); } }).start(); } } ; public void setText(){ String a = "123"; Message msg = new Message(); msg.obj = a; // msg.what =1; handler.sendMessage(msg); } public void urlGet(){ String uri = "http://www.haosou.com/?&src=360com"; HttpGet request = new HttpGet(uri); Message msg = new Message(); try{ HttpResponse httpResponse = new DefaultHttpClient().execute(request); if(httpResponse.getStatusLine().getStatusCode()==200){ String result = EntityUtils.toString(httpResponse.getEntity()).trim(); msg.obj= result; handler.sendMessage(msg); } else{ String error = "net has quesetions"; msg.obj = error; handler.sendMessage(msg); } }catch(ClientProtocolException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } private String readInStream(InputStream in){ Scanner scanner = new Scanner(in).useDelimiter("\\A"); return scanner.hasNext()?scanner.next():""; } }