okHttpClientnewCall(request)execute();,写到子线程中,这是同步请求。
okHttpClientnewCall(request)enqueue(Callback callback);使用Okhttp自带的回调函数,不用写子线程,这是异步请求。
这是ajax的一个经典问题,很多框架都提供了解决方案,重点是模拟浏览器的前进后退。
对于IE,可以用一个隐藏框架,对框架内容的导航会使得前进后退按钮被触发。
对以FF,可以用Hash,即改变http://wwwurlcom/#abc井号后面的部分,前进后退按钮同样被触发。
这样就能既让浏览器前进后退按钮被触发,同时又不离开本页面。具体方法如下:
1resize事件 (window)resize(function() { var width = (this)width(); var height = (this)height(); });
2js条用这个方法 function closewindow{ historygo(-1); }
3<input type="button" value="后退" onClick="historyback();"> 或 <input type="button" value="后退" onClick="historygo(-1);">
4windowlocationreplace Location对象的replace()方法将用指定的URL替换浏览器历史列表中的当前URL,而不是在历史列表中创建一个新的项,因此,就不能使用IE的后退按钮来返回原始文档了。 2windowopen(FF无效
相机使用基础之 调用系统中的相机应用
通过Intent直接调用系统相机
直接调用系统的相机应用,只需要在Intent对象中传入相应的参数即可,总体来说需要以下三步:
1 Compose a Camera Intent
MediaStoreACTION_IMAGE_CAPTURE 拍照;
MediaStoreACTION_VIDEO_CAPTURE录像。
2 Start the Camera Intent
使用startActivityForResult()方法,并传入上面的intent对象。
之后,系统自带的相机应用就会启动,用户就可以用它来拍照或者录像。
3 Receive the Intent Result
用onActivityResult()接收传回的图像,当用户拍完照片或者录像,或者取消后,系统都会调用这个函数。
关于接收图像
如果不设置接收图像的部分,拍照完毕后将会返回到原来的activity,相片会自动存储在拍照应用的默认存储位置。
为了接收图像,需要做以下几个工作:
1指定图像的存储位置,一般图像都是存储在外部存储设备,即SD卡上。
你可以考虑的标准的位置有以下两个:
EnvironmentgetExternalStoragePublicDirectory(EnvironmentDIRECTORY_PICTURES)
这个方法返回图像和视频的标准共享位置,别的应用也可以访问,如果你的应用被卸载了,这个路径下的文件是会保留的。
为了区分,你可以在这个路径下为你的应用创建一个子文件夹。
ContextgetExternalFilesDir(EnvironmentDIRECTORY_PICTURES)
这个方法返回的路径是和你的应用相关的一个存储图像和视频的方法。
如果应用被卸载,这个路径下的东西全都会被删除。
这个路径没有什么安全性限制,别的应用也可以自由访问里面的文件。
2为了接收intent的结果,需要覆写activity中的 onActivityResult() 方法。
前面说过,可以不设置相机返回的图像结果的 *** 作,此时在startActivityForResult()中不需要给intent传入额外的数据,这样在onActivityResult()回调时,返回的Intent data不为null,照片存在系统默认的存储路径下。
但是如果想得到这个图像,你必须制定要存储的目标File,并且把它作为URI传给启动的intent,使用MediaStoreEXTRA_OUTPUT作为关键字。
这样的话,拍摄出来的照片将会存在这个特殊指定的地方,此时没有thumbnail会被返回给activity的回调函数,所以接收到的Intent data为null。
有回调的方法就是用来写处理结果的,直接在回调函数里写处理的方法。 一般的请求类似于
Json json = httpgetHttp(); json是请求的返回结果,因为是异步的,所以这种情况要封装,加入回调函数,volley已经把这个工作做好了,你再封装回去不是做无用功么。
我知道你的意思,写个方法判断是否登录,有两种情况,一是之前登录过,app保存了session,直接判断有没有缓存就直接决定是否登录,这是同步的,第二种是用账号密码等去请求登录,但这是耗时的,所以要异步,就不能用这种方式了,直接回调里处理(返回值解析没问题了跳转主页面)就行了
如果你非要同步请求判断,volley有个同步请求的,如下(这个要写在线程里),但这样思路有问题,不是所有东西都封装才好
RequestFuture<String> future = RequestFuturenewFuture();
StringRequest request = new StringRequest("http://vjsoncom", future, future);
VjsonVolleyaddRequest(request);
try {
String result = futureget();
//futureget(timeout, unit)
Logd(MainActivityclassgetSimpleName(), result);
} catch (InterruptedException e) {
eprintStackTrace();
} catch (ExecutionException e) {
eprintStackTrace();
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)