Android中的Ajax

使用Ajax进行学习和Android的入门 首先,我们需要了解Ajax的基本原理。Ajax代表"Asynchronous JavaScript and XML"(异步JavaScript和XML),尽管XML在现代应用中的使用已经减少,但Ajax仍然是一个广泛使用的术语。在上面的示例中,我们首先在onCreate方法中获取TextView的引用,然后使用AsyncTask执行网络请求。在GetDataTask类中,我们重写了doInBackground方法,在该方法中执行HTTP GET请求,并将服务器响应的数据作为字符串返回。 阅读详情

所谓Android中的Ajax就是Android中的异步交互的技术。有了这个技术可以让用户有更好的体验。需要在后台获取数据的过程中在前台显示获取的进度,至少要让用户知道正在获取数据。

安卓显示的界面是一个线程,既然要异步,那获取数据的时候肯定就要新开一个线程。如果有时间,可以自己去写一个线程。如果时间不够(或者说你够懒),那么我们可以使用android给我们提供好的一乐类

public abstract class android.os.AsyncTask

从这个类的定义来看,这是一个抽象类,里面的一些方法需要我们自己去实现。

其中,有几个方法是一定要实现的:

protected abstract Object doInBackground(Object... arg0);
protected void onPostExecute(Object result)

这两个方法,看名字就知道,第一个是后台运行的方法,不用想就知道它会自动给我们在后台新开一个线程(或多个?)去进行查询。而第二个方法,是在查询之后会调用。

doInBackground肯定是要自己实现的,第二个方法,因为不是抽象方法,查询之后会做什么可以自己去看src。

那么怎么用呢?看下面完整代码。

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

public class AsyncTaskActivity extends Activity {
    
	private ImageView mImageView;
	private Button mButton;
	private ProgressBar mProgressBar;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mImageView= (ImageView) findViewById(R.id.imageView);
        mButton = (Button) findViewById(R.id.button);
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
        mButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Get优快云LogoTask task = new Get优快云LogoTask();
				task.execute("http://csdnimg.cn/www/images/csdnindex_logo.gif");
			}
		});
    }
    
    class Get优快云LogoTask extends AsyncTask<String,Integer,Bitmap> {
    	 /**
 	    * 在 doInBackground(Params...)之前被调用,在ui线程执行.
 	    * 进行准备工作
 	    */
 	     protected void onPreExecute () {
 	    	 mImageView.setImageBitmap(null);
 	    	//进度条复位
 	    	 mProgressBar.setProgress(0);
 	     }

    	/**
    	 * 处理后台执行的任务,在后台线程执行
    	 * @param params 因为需要的是地址,所以是String类型
    	 */
		@Override
		protected Bitmap doInBackground(String... params) {
			//将会调用onProgressUpdate(Integer... progress)方法
			publishProgress(0);
			HttpClient hc = new DefaultHttpClient();
			publishProgress(30);
			//获取csdn的logo
			HttpGet hg = new HttpGet(params[0]);
			final Bitmap bm;
			try {
				HttpResponse hr = hc.execute(hg);
				bm = BitmapFactory.decodeStream(hr.getEntity().getContent());
			} catch (Exception e) {
				
				return null;
			}
			publishProgress(100);
			//mImageView.setImageBitmap(result); 不能在后台线程操作ui
			return bm;
		}
		/**
		 * 在调用publishProgress之后被调用,在ui线程执行(non-Javadoc)
		 * 进行进度更新
		 * @see android.os.AsyncTask#onProgressUpdate(java.lang.Object[])
		 */
		protected void onProgressUpdate(Integer... progress) {
			//更新进度条的进度
			mProgressBar.setProgress(progress[0]);
	     }
		/**
		 * 后台任务执行完之后被调用,在ui线程执行
		 * @param result 此类型为doInBackground()返回的参数类型
		 */
	     protected void onPostExecute(Bitmap result) {
	    	 if(result != null) {
	    		 Toast.makeText(AsyncTaskActivity.this, "成功获取图片", Toast.LENGTH_LONG).show();
	    		 mImageView.setImageBitmap(result);
	    	 }else {
	    		 Toast.makeText(AsyncTaskActivity.this, "获取图片失败", Toast.LENGTH_LONG).show();
	    	 }
	     }
	     
	  
	     
	   /**
	    * 在ui线程执行,取消异步任务的时候执行。
	    */
	     protected void onCancelled () {
	    	//进度条复位
	    	 mProgressBar.setProgress(0);
	     }	
    }
}


这是我在csdn的另外一篇博客上找到的异步获取csdn的logo的代码。这里使用了一个内部类去继承了AsyncTask。

需要注意的是继承的时候有定义泛型。那么这个泛型是做什么的呢?

泛型里的第一个参数,是在你执行这个异步的时候需要的参数类型。

第二个参数,是进度条的值的类型

第三个参数,doInBackground方法所返回的参数类型。

这三个泛型的类型,只能写对象类型,不能写基本类型。


另外,需要强调两点:

1、doInBackground方法所返回的类型一定要和onPostExecute方法接受的类型、类继承时定义的三个泛型中的第一个类型要保持一致。

2、doInBackground方法只能做数据的处理(CRUD),对界面的修改一定要放在onPostExecute方法中去执行。


如果还需要在查询之前或者取消的时候做一些工作,那么可以重写protected void onPreExecute () 方法和protected void onCancelled ()。

上面的代码中还重写了一个protected void onProgressUpdate(Integer... progress)方法。这个方法是用来更新进度条的。这个参数类型是三个泛型中的第二个。


做完上面的工作,我们只需要在对应的地方实例化这个AsyncTask的实现类,然后调用execute方法即可。调用这个方法的时候可以传参,也可以不传参。上面的代码中因为需要一个图片的地址,所以传了个String类型的地址进去。而我自己实际使用的时候,直接在onCreate方法中调用的execute,并没有传参,这样也是可以的。而且直接在OnCreate中调用的话,那么会在这个页面生成的时候就去进行异步交互。


至此,一个异步交互就实现了。


android Ajax Demo post AjaxHandler ajaxHandler = new AjaxHandler("这里填网站", "utf-8"); //Post的数据 Map map = new HashMap(); map.put("user","admin"); map.put("pass", "123"); //内部实现多线程机制,以回调函数的方式返回 ajaxHandler.post(map, new OnAjaxListener() { //访问出错AjaxError.type 为错误编号 @Override public void Error(AjaxError arg0) { } //开始访问 @Override public void Loading() { loading.setVisibility(0); loading() text.setText("自动登录中.."); } //访问成功 @Override public void Success(final AjaxData arg0, String arg1, final boolean arg2) { }); //注意:服务器端要求格式{"data":"ffffff","info":"提示","status":"结果,1或0,true或false"}格式错误会返回解析错误 立即下载

相关推荐

AjaxHttp(封装http)

分离出afinal框架下的AjaxHttp!

Android WebView加载服务端页面AJAX认证失败问题

【场景描述】 通过Android 4.0.4 WebView内嵌服务端数据列表展示页面,且页面内点击某条数据需要Ajax动态加载数据明细。 说明: 1、服务端需要对客户端进行认证。 2、内嵌的Web页面采用同样的认证方式。 【实现方案】 1、客户端通过HttpClient调用服务端接口进行登录,然后再或者登录后服务端返回的Cookie信息并将其保存到全局静态变量。 DefaultHt

wayne_sulong的专栏 3563

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

zhulewen的博客 7883

android webview 支持ajax,实例详解Android Webview拦截ajax请求

Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能如:统一的网络请求管理、cookie同步、证书校验、访问控制等。思路虽然在 Webview中无法直接拦截 ajax请求(其实在shouldIntercep...

weixin_35656580的博客 346

5分钟搞定CST周期性结构仿真:共面波导色散曲线快速生成技巧

本文提供了一套在CST Studio Suite中快速仿真周期性结构并生成色散曲线的标准化流程。针对共面波导设计,重点解析了周期性边界条件的核心设置、本征模求解器(JDM算法)的优化技巧,以及通过参数扫描与后处理模板实现自动化,旨在帮助射频与微波工程师在5分钟内高效完成关键性能验证。

blue的专栏 1246

串口调试神器诞生记:我是如何用Cursor+AI自动生成C#上位机的(含VSCode插件清单)

本文详细介绍了如何利用Cursor和AI技术快速开发C#上位机程序,实现高效的串口通讯调试。从开发环境搭建到代码自动生成,再到性能优化和功能增强,全面展示了AI辅助开发在串口调试中的实际应用和显著效率提升。

weixin_28340315的博客 299

安卓开发ajax post,Ajax实现post请求

Ajax实现post请求window.onload=function(){var form=document.getElementsByTagName('form')[0];form.onsubmit=function(){//1.收集信息var username=document.getElementById('username').value;var password=document.get...

weixin_36211244的博客 502

18、深入解析航空飞行数据中的秘密:从数据清理到高级分析

本文详细解析了如何使用R语言处理和分析航空飞行数据,从基础的数据清理到复杂的回归分析和机器学习模型构建。文章涵盖了探索性数据分析、天气数据的整合、地理信息可视化、时间序列预测以及航班延误的优化策略等内容,展示了如何通过数据挖掘技术提高航空运营效率和乘客满意度,并探讨了数据质量评估与隐私保护的重要性。

convnet3designer的博客 106

Android程序调用ajax代码,可以在Android中完成ajax调用吗?

您可以使用droidQuery,它是jQuery的Android端口,并包含jQuery的大部分功能和语法,包括Ajax.例如:$.ajax(new AjaxOptions().url("http://www.example.com").type("GET").dataType("json").success(new Function() {@Overridepublic void invoke(...

weixin_42644249的博客 658

解锁RK1126与SC132GS摄像头适配密码:技术与代码全解析

本文详细介绍了瑞芯微RK1126芯片与SC132GS摄像头的适配方法。首先分析了RK1126的四核Cortex-A7处理器、Mali-T860 GPU等硬件特性,以及SC132GS的130万像素、全局快门等技术参数。重点阐述了基于MIPI CSI接口的硬件连接原理和基于V4L2框架的软件驱动设计,并提供了完整的初始化、数据采集和图像处理代码实现。针对常见连接和图像质量问题给出了解决方案,展现了该组合在智能安防、工业检测等领域的应用潜力,为开发者提供了实用的技术参考。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1501

SCADA|用KingSCADA实现设备台账的查询功能

以上为用KingSCADA实现设备台账的查询功能,另外还有一些细节功能,比如当点击增加按钮时弹出的信息窗口内的信息希望是在选中的某行信息,只要找到差不多的设备,修改个别参数即可,避免增加时弹出空白页,所有信息都需要填写。以上为实现设备台账查询的最简单实现,实际项目中可能会更复杂,你做过哪些设备台账或相关的功能,有比较好的创意或高难度功能方法,欢迎在留言区评论,或在交流群探讨,互通有无,共同进步。首先完成界面的组态工作,主要是通过查询按钮,查询SQLServer数据库的设备台账数据,然后填充到报表内。

做有价值的事,积累有价值的笔记! 477

android h5 ajax,h5真机调试ios的ajax请求失败,但是安卓的可以

url是http请求,模拟ajax post请求,后台也能收到,同样的请求方式,安卓的就可以提交到后台,ios的就链接失败,代码如下var data ={loginName:userName,password:password};var infomation_url = rootUrl+'User/Login';$.ajax({async : true,contentType : 'applica...

weixin_39753616的博客 587

快速生成2D卡通人物的AI工具:开启Live2D角色创作的新时代

随着这一创新工具的推出,我们正见证着Live2D角色创作进入了一个全新的阶段。它不仅极大地简化了角色设计的过程,也为广大创作者提供了一种全新的表达方式。对于那些渴望将脑海中的构思迅速转化为现实的人来说,这无疑是一大福音。现在就访问项目主页,开始探索无限可能吧!t=O83A项目主页https://human3daigc.github.io/Textoon_webpage/

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 4831

安卓获取网页ajax内容,获取阿贾克斯加载的HTML中的WebView的Android

我试图让Android的网页的内容。我已经使用JSoup尝试,但它并没有使用AJAX的支持..获取阿贾克斯加载的HTML中的WebView的Android所以我试图加载URL在一个不可见的web视图,并得到在onPageFinished方法的HTML ..我可以得到的HTML,但没有出现ajax加载的HTML。下面的代码:final WebView webView = (WebView) find...

weixin_30045055的博客 341

支付宝域名如何加入白名单(扫码老是弹窗)

支付宝扫码之后,遇到非支付宝官方网页,请确认是否继续访问弹窗,问题解决办法。本章教程提供解决办法,亲测有效。

猿小白的博客 9187

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android表单错误提示,安卓微信中用$.ajax提交表单一直返回error

在其他手机浏览器和iphone的微信中都没问题,只有在安卓的微信中会返回error,XMLHttpRequest.status 为 200, XMLHttpRequest.readyState 为 4,textStatus 为 parsererror ,请问这个可能是什么原因?-------------------------------------测试发现6.0版本的微信没有这个问题$(docu...

weixin_42361283的博客 276

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

android拦截ajax,Android:拦截来自WebView的AJAX调用

我想要一个HTML/javascript应用程序,在WebView中运行,以生成由AJAX代码处理的Java调用。理想的是拦截调用(简单,只需使用shouldOverrideUrlLoading())并“返回”一些数据。但是,除了使用WebView调用javascript函数之外,我找不到“返回”对loadUrl()的响应的方法。这对我来说不起作用,因为HTML/javascript应用程序是我无...

weixin_34431283的博客 677

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android ajax https请求,HBuilderX 安卓手机 ajax请求https接口时报:net::ERR_NAME_NOT_RESOLVED...

$.ajax({type: "post",url: "https://xxxxxxx.xxxxxxxx",data: {"appKey":k, "appSecret": s},dataType: "json",success: function (response) {console.log(response);if (response.code && response.code ...

weixin_39604598的博客 1272

android webview 支持ajax,Ajax在android webview中不起作用

我正在webview中加载一个网站,我们在网站上使用了Ajax,它在网页浏览器和移动浏览器上也运行良好,但在android webview中ajax无法正常工作,控制台中没有错误.这是我的代码: –public class Activity_WebView extends AppCompatActivity implementsConnectivityReceiver.ConnectivityRe...

weixin_35086195的博客 607

html5+jquerymobile+phonegap 安卓 ajax /js 跨域

跨域提交不要想得太复杂了, 由于HTML5开始,网页版本的HTML5不能跨域 但是 HTML5+phone 转成安卓 的 eclipse环境里 ,肯定要面对跨域的问题, 不要想得太复杂了,配置jquerymobile 即可, 在引入jquery.mobile.***.js 之前 加入          $(document ).bind( "mobileinit", function(

mfc2003的专栏 4210

Android Webview拦截ajax请求

Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能如:统一的网络请求管理、cookie同步、证书校验、访问控制等。那么究竟有没有办法能在Webview中拦截ajax请求呢?

杜文的专栏 6314

android ajax jar包,Ajax post data in android java

I am new t ajax, but quite familiar with android. I am converting a ajax program to android app. As a part of it, i need to post data to the server. Below is the given post command in ajax.var postTo ...

weixin_35561837的博客 168

android browser ajax,使用jQuery Ajax的Android浏览器问题以及使用appcache时的问题

我们在Android 4.0,4.1和4.2上有内置浏览器的问题(我们没有更低的东西可以测试).问题是ajax调用在第一次加载时会完美运行,你可以根据需要多次按下运行Ajax按钮,这样就可以了.您可以断开互联网连接,它将正常工作.但是如果您退出(完全确保它不仅仅在后台运行)浏览器然后重新启动它,它将在加载时失败并按下按钮.如果您在线或离线并不重要.从ajax调用返回的错误是“Error”,stat...

weixin_28977123的博客 242
上一篇: Android旋转屏幕
下一篇: Struts2+Spring3+MyBatis3整合以及Spring注解开发
levelnini
博客等级 码龄14年 45粉丝 37原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值