今天在做上传时遇到问题,便把我的代码粘到Android群里,才知道原来我已经落后的不至一点点,或者说从来没有进步过,我的代码他们说很老的方法,现在Android中上传都用开源框架Android-async-http,这个在网上一百度,一大堆,而且很好用,在官网上下载好包,导入,剩下的上传只需要一个助手类和几行代码即可。
具体操作如下,首先我建了个助手类,这里我为Httputil.java,代码如下
package com.tianditu.utils;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
public class HttpUtil {
private static AsyncHttpClient client = new AsyncHttpClient(); // 实例话对象
static {
client.setTimeout(11000); // 设置链接超时,如果不设置,默认为10s
}
public static void get(String urlString, AsyncHttpResponseHandler res) // 用一个完整url获取一个string对象
{
client.get(urlString, res);
}
public static void get(String urlString, RequestParams params,
AsyncHttpResponseHandler res) // url里面带参数
{
client.get(urlString, params, res);
}
public static void get(String urlString, JsonHttpResponseHandler res) // 不带参数,获取json对象或者数组
{
client.get(urlString, res);
}
public static void get(String urlString, RequestParams params,
JsonHttpResponseHandler res) // 带参数,获取json对象或者数组
{
client.get(urlString, params, res);
}
public static void get(String uString, BinaryHttpResponseHandler bHandler) // 下载数据使用,会返回byte数据
{
client.get(uString, bHandler);
}
public static AsyncHttpClient getClient() {
return client;
}
}
在完成这个类以后,在调用其中的方法,如下:
String filpath = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ "/"
+ "formats/quick_search_widget_night.JPEG";
System.out.println(filpath);
File myFile = new File(filpath);
RequestParams params = new RequestParams();
try {
params.put("filename", myFile);
AsyncHttpClient client = new AsyncHttpClient();
client.post(HOST, params,
new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0,
Header[] arg1, byte[] arg2,
Throwable arg3) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(int arg0,
Header[] arg1, byte[] arg2) {
System.out.println("上传成功");
Toast.makeText(Upload.this, "上传成功!",
Toast.LENGTH_LONG).show();
}
});
} catch (FileNotFoundException e) {
}
这样,就可以图片就可以上传了。服务端只要用写个servlet来接收就行了,mark一下,高手勿喷。
看来真的要时时保持学习啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~