博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android网络编程之HttpUrlConnection的讲解--上传大文件
阅读量:7040 次
发布时间:2019-06-28

本文共 3385 字,大约阅读时间需要 11 分钟。

1、服务器后台使用Servlet开发,这里不再介绍。

2、网络开发不要忘记在配置文件中添加访问网络的权限

3、网络请求、处理不能在主线程中进行,一定要在子线程中进行。因为网络请求一般有1~3秒左右的延时,在主线程中进行造成主线程的停顿,对用户体验来说是致命的。(主线程应该只进行UI绘制,像网络请求、资源下载、各种耗时操作都应该放到子线程中)。

4、传输大文件的时候会出现OOM出错,所以我们可以设置每次传输流的大小。

5、

public class FileActivity extends Activity {    private TextView mTvMsg;        private String result = null;        @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_file);                initView();    }        private void initView(){        mTvMsg = (TextView) findViewById(R.id.tv_msg);                new Thread(fileThread).start();    }        private Thread fileThread = new Thread(){        public void run() {            HttpURLConnection connection = null;            try {                URL url = new URL("http://192.168.23.1:8080/TestProject/FileTest");                connection = (HttpURLConnection) url.openConnection();                // 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃                // 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP请求正文的流。                connection.setChunkedStreamingMode(51200); // 128K                // 不使用缓存                connection.setUseCaches(false);                // 设置请求方式                connection.setRequestMethod("POST");                // 设置编码格式                connection.setRequestProperty("Charset", "UTF-8");                // 设置容许输出                connection.setDoOutput(true);                // 上传文件                FileInputStream file = new FileInputStream(Environment.getExternalStorageDirectory().getPath()                         + "/aaaaa/baidu_map.apk");                OutputStream os = connection.getOutputStream();                byte[] b = new byte[1024];                int count = 0;                while((count = file.read(b)) != -1){                    os.write(b, 0, count);                }                os.flush();                os.close();                                // 获取返回数据                if(connection.getResponseCode() == 200){                    InputStream is = connection.getInputStream();                    result = StringStreamUtil.inputStreamToString(is);                                        Message msg = Message.obtain();                    msg.what = 0;                    fileHandler.sendMessage(msg);                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (Exception e) {                e.printStackTrace();            } finally {                if(connection != null){                    connection.disconnect();                }            }        };    };        private Handler fileHandler = new Handler(){        public void handleMessage(android.os.Message msg) {            if(msg.what == 0 && result!=null){                mTvMsg.setText(result);            }        };    };}

6、输出流OutputStream的三个方法,第二和第三个方法应该是安全的,但第一个方法可能出现错误。因为你没读1024字节,却写了1024字节,所以可能出错。(我试了几次是出错的,也可能是我代码写错了,但我建议大家还是不要使用第一个方法)。

    os.write(byte[] buffer);

    os.write(int arg0);
    os.write(byte[] buffer, int offset, int count);

7、android HttpURLConnection上传文件出现Content-Length的长度限制参考博文:

     http://www.oschina.net/question/223455_44878

8、android 上传大文件中断参考博文:

     http://www.oschina.net/question/94349_58751

转载于:https://www.cnblogs.com/begin1949/p/5060802.html

你可能感兴趣的文章
SAP BW好文章链接
查看>>
C#防止WebBrowser在新窗口中打开链接页面
查看>>
MongoDB 2.4 RC2 (2.3 开发系列) 发行说明
查看>>
php.ini修改php上传文件大小限制(转)
查看>>
office2003 下载地址 及密码
查看>>
C# ORM—Entity Framework 之Code first(代码优先)(二)
查看>>
/etc/vim/vimrc的一个的配置
查看>>
javascript商务通
查看>>
JavaScript Array 对象扩展方法
查看>>
利用ngxtop实时监控nginx的访问情况
查看>>
浏览器中关于事件的那点事儿(转)
查看>>
c#Lamdba表达式与托付
查看>>
VC皮肤库SkinSharp 1.0.6.6的使用
查看>>
php上传图片到server
查看>>
微信公众平台原创声明功能公测 自媒体原创保护的福音
查看>>
想学ps的,这全是精华,拿走不谢!!!
查看>>
如何对 GIT 分支进行规划?
查看>>
说说非托管资源的回收
查看>>
虚拟机安装麒麟3.2时报unkown filesystem,you need to load the linux kernel first
查看>>
使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结
查看>>