AsyncTask 异步处理


package com.ch.day8_asynctaskdemo;

import java.util.ArrayList;

import com.ch.myutils.NetWorkUtil;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
private EditText name;
private EditText pass;
private Button login;
Context mcontext;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mcontext = this;
init();
}

public void init(){
name = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.userpass);
login = (Button) findViewById(R.id.login);

login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String nameV = name.getText().toString();
String passV = pass.getText().toString();

//判断网路是否畅通加权限
if(NetWorkUtil.isNetAvailable(mcontext)){//网络畅通
//通过AsyncTask访问服务器

new MyAsyncTask().execute(nameV,passV,NetWorkUtil.LOGIN_URL);//调用MyAsyncTask执行请求
}
}
});
}
class MyAsyncTask extends AsyncTask<String, Integer, String>{
// 后台执行,比较耗时的操作都可以放在这里
@Override
protected String doInBackground(String... params) {//params的类型和AsyncTask类的第一个泛型对应
// TODO Auto-generated method stub
String uname = params[0];//得到用户名
String upass = params[1];//得到密码
String url = params[2];//得到url
String rs = NetWorkUtil.loginCheck_Get_HttpClient(uname, upass, url);//请求服务器。得到结果

return rs;//把请求的结果传递到onPostExecute方法中
}
//相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI
@Override
protected void onPostExecute(String result) {//result的类型和AsyncTask类的第三个泛型对应
// TODO Auto-generated method stub
login.setText(result);
//判断登陆的结果,决定是否跳转

// super.onPostExecute(result);
}

}

}

 
   

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;

}

}

 
   
时间: 2024-10-08 12:48:53

AsyncTask 异步处理的相关文章

Android多线程分析之五:使用AsyncTask异步下载图像

Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<Android多线程分析之中的一个:使用Thread异步下载图像>中.曾演示了怎样使用 Thread 来完毕异步任务. Android 为了简化在 UI 线程中完毕异步任务(毕竟 UI 线程是 app 最重要的线程).实现了一个名为 AysncTask 的模板类.使用 AysncTask 能够在异步任务进行的同

asyncTask异步任务:从网络下载图片

[关键字]:3个参数,4个步骤 第一步:表示任务执行前的操作 第二步:主要完成耗时操作 第三步:主要是更新UI操作 第四步:产生最终结果 以下实例中代表的含义为: 第一步:显示进度条 第二步:(此任务必不可少)在后台执行任务,将进度值传给第三步,将结果传给第四步: 第三步:进度值更新 第四步:产生最终结果 1.添加网络授权: 因为手机默认不能访问网络,所以首先要在清单文件 AndroidManifest.xml中添加网络授权. 方法如下: 打开AndroidManifest.xml文件,点击"P

AsyncTask 异步线程 用法

AsyncTask介绍Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理.首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的.Android为了降低这个开发难度,提供了AsyncTask.AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务.AsyncTask直接继承于Object类,位置为android.os.AsyncTask.要使用Asy

Android AsyncTask异步任务

在上一篇文章<Android网络编程之使用HttpClient进行Get方式通信>中,我们强制直接在UI线程进行网络操作,在实际的应用开发过程中不能这样做,因为这样很可能会阻塞UI,影响用户体验.为了避免直接在UI线程中进行网络操作,我们可以使用AsyncTask异步处理网络通信和UI更新.通过AysncTask可以很容易的启动后台线程进行网络通信,然后将结果返回到UI线程中. AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接

Android异步更新UI的方式之使用AsyncTask异步任务

由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中更新UI,给大家介绍一种方式:使用AsyncTask异步任务. 下面用这种方式更新一个TextView: 注:更新UI的操作只能在onPostExecute(String result)方法中. package com.example.runonuithreadtest;  import android.app.Activity;  import android.os.AsyncTask;  import android.

Android线程管理之AsyncTask异步任务(四)

前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 产生背景: 我们都知道Android应用程序是单线程模型,在子线程无法直接操作UI主线程,必须通过Handler机制,想了解这方面的知识可以参考这篇文章:Android消息传递之Handler消息机制(一),所以基于这种考虑所以我们一般情况会采用Thread+Handler来处理比较耗时的操作,但是我们都知道

Android中使用Thread线程与AsyncTask异步任务的区别

最近和几个朋友交流Android开发中的网络下载问题时,谈到了用Thread开启下载线程时会产生的Bug,其实直接用子线程开启下载任务的确是很Low的做法,那么原因究竟如何,而比较高大上的做法是怎样?于是用这篇博文详细分析记录一下. 一.概念介绍 Thread是指在CPU运行的一个程序中,可以有多个执行路径.运行的程序称作进程,而这个执行路径,就被称为线程(如果对这两个名词不太理解的同学可以参考一下操作系统方面的书籍).Java中的多线程是指多个Thread可以在一段内同步执行,这样可以提高代码

AsyncTask异步任务 源码解读

之前我们介绍了Handler的一些基本用法,也解读了Handler的源码.通过Handler我们可以简便的切换到主线程进行UI操作.而AsyncTask的出现使我们不用去关心线程管理和切换的一些细节,我们可以更轻松的去操作UI. 基本概念 AsyncTask异步任务的作用 AsyncTask,见名之意,异步任务.允许我们在后台做一些耗时操作,然后切换到主线程更新,而且这一过程变得非常简便.一提到异步任务,我们的第一反应就是多线程.假如我们现在需要去下载一张图片,然后在界面上显示,如果没有Asyn

AsyncTask异步任务与LruCache缓存策略实现图片加载(一)

AsyncTask异步任务与LruCache缓存策略实现图片加载 AsyncTask异步任务 以下内容节选自官方文档: AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or ha

Android AsyncTask异步加载WebAPI

之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncTask内置的方法去处理.而已傻傻的在OnCreate中处理.结果还是要等待AsyncTask加载完成后,等待OnCreate执行完成后,才load到Activity.这样子给人的第一感觉就是卡机了一样! 果断重新再写,这次的代码真是大换血.首先还是选择把带分页ListView进行封装了一下. 1 i