zoukankan      html  css  js  c++  java
  • AsyncTask 异步处理

     1 package com.ch.day8_asynctaskdemo;
     2 
     3 import java.util.ArrayList;
     4 
     5 import com.ch.myutils.NetWorkUtil;
     6 
     7 import android.os.AsyncTask;
     8 import android.os.Bundle;
     9 import android.app.Activity;
    10 import android.content.Context;
    11 import android.util.Log;
    12 import android.view.Menu;
    13 import android.view.View;
    14 import android.view.View.OnClickListener;
    15 import android.widget.Button;
    16 import android.widget.EditText;
    17 
    18 public class MainActivity extends Activity {
    19     private EditText name;
    20     private EditText pass;
    21     private Button login;
    22     Context mcontext;
    23     
    24     @Override
    25     protected void onCreate(Bundle savedInstanceState) {
    26         super.onCreate(savedInstanceState);
    27         setContentView(R.layout.activity_main);
    28         mcontext = this;
    29         init();
    30     }
    31     
    32     public void init(){
    33         name = (EditText) findViewById(R.id.username);
    34         pass = (EditText) findViewById(R.id.userpass);
    35         login = (Button) findViewById(R.id.login);
    36         
    37         login.setOnClickListener(new OnClickListener() {
    38             @Override
    39             public void onClick(View v) {
    40                 String nameV = name.getText().toString();
    41                 String passV = pass.getText().toString();
    42                 
    43                 //判断网路是否畅通加权限
    44                 if(NetWorkUtil.isNetAvailable(mcontext)){//网络畅通
    45                     //通过AsyncTask访问服务器
    46                     
    47                     new MyAsyncTask().execute(nameV,passV,NetWorkUtil.LOGIN_URL);//调用MyAsyncTask执行请求
    48                 }
    49             }
    50         });
    51     }
    52     class MyAsyncTask extends AsyncTask<String, Integer, String>{
    53         // 后台执行,比较耗时的操作都可以放在这里
    54         @Override
    55         protected String doInBackground(String... params) {//params的类型和AsyncTask类的第一个泛型对应
    56             // TODO Auto-generated method stub
    57             String uname = params[0];//得到用户名
    58             String upass = params[1];//得到密码
    59             String url = params[2];//得到url
    60             String rs = NetWorkUtil.loginCheck_Get_HttpClient(uname, upass, url);//请求服务器。得到结果
    61             
    62             return rs;//把请求的结果传递到onPostExecute方法中
    63         }
    64         //相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI
    65         @Override
    66         protected void onPostExecute(String result) {//result的类型和AsyncTask类的第三个泛型对应
    67             // TODO Auto-generated method stub
    68             login.setText(result);
    69             //判断登陆的结果,决定是否跳转
    70             
    71 //            super.onPostExecute(result);
    72         }
    73         
    74     }
    75 
    76 
    77 }
    package com.ch.myutils;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.util.EntityUtils;
    
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    
    public class NetWorkUtil {
        public static final String LOGIN_URL = "http://169.254.109.73:8080/serverof1407a/loginServlet";
        public static boolean isNetAvailable(Context context){
            //获得网络管理器
            ConnectivityManager connM = 
                    (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = connM.getActiveNetworkInfo();//得到网络详情
            
            if(netInfo == null || !netInfo.isAvailable())
                return false;
            
            return true;
        }
        
        public static String loginCheck_Get_HttpClient(String name,String pass,String url){
            //通过StringBuffer来加工url
            StringBuffer sb = new StringBuffer(url);
            sb.append("?username=");
            sb.append(name);
            sb.append("&userpass=");
            sb.append(pass);
            
            String result = "";
            
            HttpGet get = new HttpGet(sb.toString());//创建httpClient的get请求对象
            //设置请求参数
            HttpParams params = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(params, 5*1000);
            HttpConnectionParams.setSoTimeout(params, 5*1000);
            
            HttpClient client = new DefaultHttpClient(params);//创建HttpClient对象
            
            try {
                HttpResponse res = client.execute(get);//执行请求,获得结果
                if(res.getStatusLine().getStatusCode() == 200){
                    HttpEntity entity = res.getEntity();//获得相应结果,是一个HttpEntity对象
                    result = EntityUtils.toString(entity, "utf-8");//转换为字符串
                }
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return result;
            
        }
    
        
    }
  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/1426837364qqcom/p/5113642.html
Copyright © 2011-2022 走看看