android异步和http客户端
我在android应用程序中有一个自定义http类,用于处理发送到服务器的http post数据。但是,我需要将其转换为extend asyncTask,因为我需要1,在获取数据时显示进度动画,2,同时刷新/更新ui 那么最简单的方法是什么呢。请注意,我已经在整个应用程序中使用该类来处理httpPOST请求 下面是课堂:android异步和http客户端,android,android-asynctask,Android,Android Asynctask,我在android应用程序中有一个自定义http类,用于处理发送到服务器的http post数据。但是,我需要将其转换为extend asyncTask,因为我需要1,在获取数据时显示进度动画,2,同时刷新/更新ui 那么最简单的方法是什么呢。请注意,我已经在整个应用程序中使用该类来处理httpPOST请求 下面是课堂: public class Adapter_Custom_Http_Client { //<editor-fold defaultstate="collap
public class Adapter_Custom_Http_Client
{
//<editor-fold defaultstate="collapsed" desc="Class Members">
public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds
private static HttpClient mHttpClient;
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="getHttpClient">
private static HttpClient getHttpClient()
{
if(mHttpClient == null)
{
mHttpClient = new DefaultHttpClient();
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
}
return mHttpClient;
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="executeHttpPost">
public static String executeHttpPost(String url, ArrayList postParameters) throws Exception
{
BufferedReader in = null;
try
{
HttpClient client = getHttpClient();
HttpPost request = new HttpPost(url);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null)
{
sb.append(line + NL);
}
in.close();
String result = sb.toString();
return result;
}
finally
{
if (in != null)
{
try
{
in.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="executeHttpGet">
public static String executeHttpGet(String url) throws Exception
{
BufferedReader in = null;
try
{
HttpClient client = getHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(url));
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null)
{
sb.append(line + NL);
}
in.close();
String result = sb.toString();
return result;
}
finally
{
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
//</editor-fold>
}
公共类适配器\u自定义\u Http\u客户端
{
//
公共静态最终整数HTTP_超时=30*1000;//毫秒
专用静态HttpClient mHttpClient;
//
//
私有静态HttpClient getHttpClient()
{
if(mHttpClient==null)
{
mHttpClient=新的DefaultHttpClient();
最终HttpParams params=mHttpClient.getParams();
setConnectionTimeout(参数,HTTP_超时);
HttpConnectionParams.setSoTimeout(参数,HTTP_超时);
setTimeout(参数,HTTP_超时);
}
返回mHttpClient;
}
//
//
公共静态字符串executeHttpPost(字符串url、ArrayList后参数)引发异常
{
BufferedReader in=null;
尝试
{
HttpClient=getHttpClient();
HttpPost请求=新的HttpPost(url);
UrlEncodedFormEntity formEntity=新的UrlEncodedFormEntity(后参数);
请求。setEntity(formEntity);
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null)
{
sb.追加(行+NL);
}
in.close();
字符串结果=sb.toString();
返回结果;
}
最后
{
if(in!=null)
{
尝试
{
in.close();
}捕获(IOE异常)
{
e、 printStackTrace();
}
}
}
}
//
//
公共静态字符串executeHttpGet(字符串url)引发异常
{
BufferedReader in=null;
尝试
{
HttpClient=getHttpClient();
HttpGet请求=新建HttpGet();
setURI(新的URI(url));
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null)
{
sb.追加(行+NL);
}
in.close();
字符串结果=sb.toString();
返回结果;
}
最后
{
if(in!=null)
{
尝试
{
in.close();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
}
}
//
}
如下所示:
public class postmethod extends AsyncTask<Void, Void, Void> {
//declarations what u required
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
//do ur work here completly that will runs as background
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
}
公共类postmethod扩展了AsyncTask{
//你需要什么
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//在这里完成你的工作,这将作为背景运行
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
}
}
使用此异步类:
public class Albums extends AsyncTask<Void, Void, Void> {
//declarations what u required
@Override
protected void onPreExecute() {
super.onPreExecute();
///declare ur progress view and show it
}
@Override
protected Void doInBackground(Void... params) {
//do ur http work here which is to be done in background
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//Update ur UI here...
}
}
在活动中创建新的异步内部类:
public class InnerClass extends AsyncTask<Void, Void, String>{
ProgressDialog dialog;
@Override
protected String doInBackground(Void... params) {
String result = Adapter_Custom_Http_Client.executeHttpPost(url , param);
return result;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(context, "", "Please wait....");
super.onPreExecute();
}
}
公共类InnerClass扩展异步任务{
进程对话;
@凌驾
受保护字符串doInBackground(无效…参数){
String result=Adapter\u Custom\u Http\u Client.executehttpost(url,param);
返回结果;
}
@凌驾
受保护的void onCancelled(){
super.onCancelled();
}
@凌驾
受保护的void onPostExecute(字符串结果){
dialog.dismise();
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
dialog=ProgressDialog.show(上下文“,”请稍候…);
super.onPreExecute();
}
}
并使用
新的InnerClass().execute() 为了适应你提议的上述课程,我必须如何改变我的课程。例如,在我的主类中,我使用参数调用executehttpost方法。我现在该怎么称呼它呢?我该如何改变我的课程以适应你提议的上述课程。例如,在我的主类中,我使用参数调用executehttpost方法。我现在该如何调用它呢?您可以在Void doInBackground(Void…params)方法中调用该类或方法..并实例化我编辑的异步类..只需将该代码httppost放在doInBackground中,并像这样调用该asynctask方法:postmethod post=new postmethod();post.execute();在代替httppostok的情况下,我可以这样做,但是如何传递executeHttpPost所需的参数(字符串url、ArrayList后参数)?对不起,我只是对asynctask有点陌生。k。。。没问题…我已经解释过了。。。在这个地方,你必须声明你想做什么,但是它只会在帖子完成后执行。该对话框仅显示一秒钟。
public class InnerClass extends AsyncTask<Void, Void, String>{
ProgressDialog dialog;
@Override
protected String doInBackground(Void... params) {
String result = Adapter_Custom_Http_Client.executeHttpPost(url , param);
return result;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(context, "", "Please wait....");
super.onPreExecute();
}
}