[Android通信]Volley(一):String、Json和Image请求

本文详细介绍了如何在Android应用中使用Volley框架进行网络请求,包括全局请求队列的建立、多种类型的请求实现(GET、POST、JSON等)、图片请求、图片加载优化及网络图片展示方式。通过实例代码演示了如何使用Volley完成常见的网络操作。

参考链接:

http://blog.csdn.net/guolin_blog/article/details/17482095


0.

下载volley的jar包,并导入

下载地址:http://pan.baidu.com/s/1c0HiMnY


1.建立全局的请求队列

package com.example.testvolley;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

import android.app.Application;

public class MyApplication extends Application {
	
	private static RequestQueue requestQueue;
	public static RequestQueue getRequestQueue() {
		return requestQueue;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		requestQueue = Volley.newRequestQueue(getApplicationContext());
	}
}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testvolley"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:name="com.example.testvolley.MyApplication" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2.

package com.example.testvolley;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import com.android.volley.Request.Method;
import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.util.Log;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private ImageView imageView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) findViewById(R.id.imageView);
		
//		stringGet();
//		stringPost();
//		jsonGet();
//		jsonPost();
//		imageRequest();
//		imageLoader();
//		networkImageView();
	}

	private void stringGet() 
	{
		String url = "http://www.baidu.com";
		StringRequest sr = new StringRequest(Method.GET, url, new Listener<String>() {

			@Override
			public void onResponse(String response) {
				Log.v("tag", response);
			}
		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				Log.v("tag", error.toString());
			}
		});
		sr.setTag("stringGet");
		MyApplication.getRequestQueue().add(sr);
	}
	
	private void stringPost()
	{
		String url = "http://www.baidu.com/s?";
		Listener<String> listener = new Listener<String>() {

			@Override
			public void onResponse(String response) {
				Log.v("tag", response);
			}
		};
		Response.ErrorListener errorListener = new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				Log.v("tag", error.toString());
			}
		};
		StringRequest sr = new StringRequest(Method.POST, url, listener, errorListener) {
			@Override
			protected Map<String, String> getParams() throws AuthFailureError {
				Map<String, String> map = new HashMap<String, String>();
				map.put("wd", "android");
				return map;
			}
		};
		sr.setTag("stringPost");
		MyApplication.getRequestQueue().add(sr);
	}
	
	private void jsonGet()
	{
		String url = "http://m.weather.com.cn/atad/101230201.html";
		JsonObjectRequest jor = new JsonObjectRequest(url, null, new Listener<JSONObject>() {

			@Override
			public void onResponse(JSONObject response) {
				Log.v("tag", response.toString());
			}
		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				Log.v("tag", error.toString());
			}
		});
		jor.setTag("jsonGet");
		MyApplication.getRequestQueue().add(jor);
	}
	
	private void jsonPost()
	{
		String url = "http://fanyi.youdao.com/openapi.do?";
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("keyfrom", "lyh916");
		map.put("key", "1088118333");
		map.put("type", "data");
		map.put("doctype", "jsonp");
		map.put("callback", "show");
		map.put("version", "1.1");
		map.put("q", "API");
		JSONObject jsonRequest = new JSONObject(map);
		
		JsonObjectRequest jor = new JsonObjectRequest(Method.POST, url, jsonRequest, new Listener<JSONObject>() {

			@Override
			public void onResponse(JSONObject response) {
				Log.v("tag", response.toString());
			}
		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				Log.v("tag", error.toString());
			}
		});
		jor.setTag("jsonPost");
		MyApplication.getRequestQueue().add(jor);
	}
	
	private void imageRequest()
	{
		String url = "http://avatar.csdn.net/8/5/5/3_lyh916.jpg";
		//第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,
		//指定成0的话就表示不管图片有多大,都不会进行压缩。
		ImageRequest imageRequest = new ImageRequest(url, new Listener<Bitmap>() {

			@Override
			public void onResponse(Bitmap response) {
				imageView.setImageBitmap(response);
			}
		}, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				imageView.setImageResource(R.drawable.ic_launcher);
			}
		});
		MyApplication.getRequestQueue().add(imageRequest);
	}
	
	/*
	 * ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,
	 * 还可以过滤掉重复的链接,避免重复发送请求。使用:
	 * 0.创建一个RequestQueue对象
	 * 1.创建一个ImageLoader对象
	 * 2.获取一个ImageListener对象
	 * 3.调用ImageLoader的get()方法加载网络上的图片
	 */
	private void imageLoader()
	{
		String url = "http://avatar.csdn.net/8/5/5/3_lyh916.jpg";
		ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(), new BitmapCache());
		
		//第二个参数指定加载图片的过程中显示的图片,第三个参数指定加载图片失败的情况下显示的图片。
		ImageListener listener = ImageLoader.getImageListener(imageView, R.drawable.ic_launcher, R.drawable.ic_launcher);
		
		imageLoader.get(url, listener);
	}
	
	public class BitmapCache implements ImageCache {

		private LruCache<String, Bitmap> cache;
		
		public BitmapCache() {
			int maxSize = 10 * 1024 * 1024;//缓存图片的大小设置为10M
			cache = new LruCache<String, Bitmap>(maxSize) {  
	            @Override  
	            protected int sizeOf(String key, Bitmap bitmap) {  
	                return bitmap.getRowBytes() * bitmap.getHeight();  
	            }  
	        };
		}
		
		@Override
		public Bitmap getBitmap(String url) {
			return cache.get(url);
		}

		@Override
		public void putBitmap(String url, Bitmap bitmap) {
			cache.put(url, bitmap);
		}
	}
	
	/*
	 * NetworkImageView继承自ImageView,加入了加载网络图片的功能
	 * 使用:
	 * 0.创建一个RequestQueue对象
	 * 1.创建一个ImageLoader对象
	 * 2.在布局文件中添加一个NetworkImageView控件
	 * 3.在代码中获取该控件的实例
	 * 4.设置要加载的图片地址
	 */
	private void networkImageView()
	{
		String url = "http://avatar.csdn.net/8/5/5/3_lyh916.jpg";
		ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(), new BitmapCache());
		
		NetworkImageView networkImageView = (NetworkImageView) findViewById(R.id.networkImageView);
		networkImageView.setDefaultImageResId(R.drawable.ic_launcher);
		networkImageView.setErrorImageResId(R.drawable.ic_launcher);
		networkImageView.setImageUrl(url, imageLoader);
	}
}

3.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/networkImageView"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    
</LinearLayout>


源码下载地址: https://pan.quark.cn/s/a4b39357ea24 "ZV-1 高级功能使用手册 用户详细指南" 此文档将全面阐述 Sony ZV-1 相机的进阶功能及其操作方法,为用户呈现详尽的操作指引配置范例。 、使用指南与摄影技巧 * 本手册旨在协助用户迅速掌握 Sony ZV-1 相机的使用方法 * 提供摄影技巧与操作方法等实用信息 * 可在线查阅配件兼容性详情及配置范例 二、基础操作 * 通过控制轮菜单选项将常用功能分配至按键 * 探索功能按钮(Fn)与自定义按键的应用 * 学习显示(DISP)按钮的操作方法 * 明确拍摄及浏览时图标与提示的展示方式 三、电源与存储介质 * 查询电池续航时间及可拍摄照片数量 * 注意电池使用规范及更换事项 * 掌握存储卡插入方法及注意事项 四、语言与时间设定 * 说明语言及时间配置流程 * 熟悉相机内部功能说明拍摄模式选择 五、拍摄模式与对焦系统 * 探究拍摄模式对焦模式的选择 * 了解自动对焦、人脸/眼部自动对焦设置及主体追踪功能 * 掌握手动对焦直接手动对焦(DMF)操作 * 理解峰值对焦设置及拍摄模式选择 六、触控操作与视频录制 * 阐明触控功能特性及触控快门使用 * 学习触控对焦与触控追踪功能 * 掌握视频录制模式及高帧速率(HFR)设置 * 了解智能自动与场景识别程序 七、曝光调整与白平衡 * 熟悉曝光模式白平衡配置 * 探究ISO感光度调节与变焦功能 * 学习自动HDR及动态范围优化(DRO)技术 八、图像处理与编辑功能 * 明确图像质量与文件格式选项 * 了解美肤效果与自动构图功能 * 掌握色彩空间选择与快门速度设置 * 探索降噪处理及高ISO降噪技术 九、闪光灯与人脸识...
内容概要:本文围绕“重磅粉丝福利专栏1.8配电网分布式能源的选址与定容系列”展开,系统涵盖了电力系统与智能优化领域的多项前沿科研主题,重点聚焦于配电网中分布式能源的规划与优化问题。内容涉及三相PWM换流器建模、微电网控制、电动汽车有序充电、风光储协同调度、源网荷储体化优化、双层优化与ADMM分布式算法等核心技术,并结合Matlab/Simulink仿真工具实现多种复杂场景的建模与求解。文档列举了大量具体研究案例,如基于粒子群算法的参数辨识、多目标路径规划、需求响应下的供电能力评估等,突出其在科研复现、算法创新与工程应用中的实用价值。整体资源体系庞大,强调“借力科研”,倡导通过成熟工具与方法提升研究效率与创新能力。; 适合人群:具备定电力系统、自动化或相关工程背景,熟悉Matlab/Simulink环境,从事科研工作1-3年的研究生、科研人员或工程师。; 使用场景及目标:①用于复现高水平论文(如硕士、博士论文及EI期刊)中的算法与仿真模型;②支持科研项目中关于分布式能源规划、微电网优化、智能调度与控制策略的设计与验证;③辅助完成课程设计、毕业设计或科研竞赛中的仿真建模任务。; 阅读建议:建议读者按照文档提供的目录结构系统性浏览,优先关注与自身研究方向匹配的模块,结合提供的代码资源与仿真模型进行实践操作,注重理论分析与仿真实现的结合,以提升科研效率与创新能力。
内容概要:本文针对不对称电网故障下T型三电平逆变器的低电压穿越(LVRT)问题,提出了种多目标协同控制策略。该策略深度融合正负序分离技术、电网电压前馈控制与先进的DPWMA调制方法,构建了完整的控制系统架构,旨在实现故障期间负序电流的有效抑制、并网功率的平稳输出以及动态响应速度的显著提升。研究通过Simulink平台建立了详细的T型三电平逆变器仿真模型,对所提控制策略在稳态运行、电网电压不平衡跌落及动态切换等多种工况下的性能进行了全面验证。仿真结果表明,该方案能有效改善并网电流质量,减小功率波动,增强系统在恶劣电网条件下的运行稳定性与鲁棒性,为高比例新能源接入背景下提升电力电子设备的故障穿越能力提供了有效的技术路径。; 适合人群:具备电力电子与电力系统基础知识,从事新能源并网、逆变器控制或微电网技术研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究T型三电平逆变器在不对称电网故障下的动态行为与控制难点;②掌握正负序分离、DPWMA调制、电网前馈等关键技术的设计与实现方法;③为高比例新能源接入背景下提升并网设备低电压穿越能力提供理论支持与仿真验证手段; 阅读建议:建议结合Simulink仿真模型同步学习,重点关注控制策略的结构设计与各模块间的协同机制,深入理解正负序解耦控制与前馈补偿对系统性能的提升作用,并可通过调整故障条件进行对比实验以加深理解。
内容概要:本文提出了种融合在线鲁棒主成分分析(RPCA)与长短期记忆(LSTM)循环神经网络的商品需求预测方法,旨在应对实际商业数据中存在的噪声与异常值问题,提升预测精度与时序建模能力。该方法首先通过在线RPCA模型对原始需求序列进行实时分解,将数据分离为低秩趋势成分稀疏异常成分,从而有效剔除突发性扰动噪声干扰;随后,利用LSTM网络对清洗后的低秩趋势序列进行深度时序学习,充分捕捉其中的长期依赖关系、周期性模式及非线性动态特征,最终实现高鲁棒性与高精度的需求预测。整个框架具有良好的在线更新能力,适用于动态变化的零售、电商等业务场景,并基于Python实现了完整的算法流程。; 适合人群:具备定Python编程能力与机器学习基础,从事数据分析、供应链管理、智能预测等相关工作的科研人员与工程技术人员,尤其适合高校研究生及企业中从事智能零售与运营优化的研发人员。; 使用场景及目标:①应用于零售、电商、物流等行业中的商品销量预测任务,优化库存管理与补货决策;②为含噪声、异常点及时序突变的实际业务数据提供鲁棒的预处理与建模方案;③作为深度学习与鲁棒统计方法融合的典型案例,推动时序预测领域中模型可解释性与稳定性的研究发展。; 阅读建议:建议读者结合提供的Python代码深入理解在线RPCA与LSTM的集成机制,重点关注数据分解、特征提取与模型训练的衔接过程,并尝试在真实业务数据上进行复现与调参,以掌握其在不同噪声环境下的适应性与优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值