andorid 網絡通訊最簡單demo

要和後臺進行通訊網絡

一開始發現接不到數據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():"";
    }
}
相關文章
相關標籤/搜索