android之Async异步下载_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3317 | 回复: 0   主题: android之Async异步下载        下一篇 
java_along
注册用户
等级:上尉
经验:771
发帖:36
精华:0
注册:2014-2-17
状态:离线
发送短消息息给java_along 加好友    发送短消息息给java_along 发消息
发表于: IP:您无权察看 2014-6-30 23:32:49 | [全部帖] [楼主帖] 楼主

在命令窗口输入ipconfig,查看本地ip

北京联动北方科技有限公司

这个ipandroid代码里下载中有用。

不能以localhost,或者127.0.0.1来代替。

代码:

package com.example.android02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Activity01 extends Activity{
      private TextView text=null;
      private ProgressDialog dialog=null;
      private Button button=null;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity01);
            text=(TextView)findViewById(R.id.view1);
            //点击按钮后开始下载文件
            button=(Button)findViewById(R.id.button1);
            button.setOnClickListener(new OnClickListener() {
                  @Override
                  public void onClick(View arg0) {
                        Down down=new Down();
                        try {
                              //输入url值,异步下载文件。
                              down.execute(new URL("http://192.168.1.100/Mp3Player/log.txt"));
                        } catch (MalformedURLException e) {
                              e.printStackTrace();
                        }
                  }
            });
      }
      class Down extends AsyncTask<URL, Integer, String>{
            int progress=0;
            //在后台运行的代码~~ 也就是去url下载文件的关键代码
            @Override
            protected String doInBackground(URL... url) {
                  try {
                        HttpURLConnection conn=(HttpURLConnection)url[0].openConnection();
                        //假设读取文本文件
                        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                        String buff="";
                        StringBuilder sb=new StringBuilder();
                        while((buff=br.readLine())!=null){
                              progress++;
                              publishProgress(progress);//调用onProgressUpdate 更新dialog的进度条
                              sb.append(buff);
                        }
                        return sb.toString();
                  } catch (IOException e) {
                        e.printStackTrace();
                  }
                  return null;
            }
            //在后台下载的代码执行好后得到一个String,作为参数传入
            @Override
            protected void onPostExecute(String result) {
                  super.onPostExecute(result);
                  //把读取得到的文本内容显示
                  text.setText(result);
                  //关闭进度条的框框
                  dialog.dismiss();
            }
            //在进行异步下载前的一些准备措施
            @Override
            protected void onPreExecute() {
                  super.onPreExecute();
                  dialog=new ProgressDialog(Activity01.this);
                  dialog.setTitle("任务正在执行中");
                  dialog.setMessage("请稍等===");
                  dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                  dialog.setCancelable(true);
                  //这里我直接写死,文本内容一共1009行,所以进度条的最大值为1009
                  dialog.setMax(1009);
                  dialog.show();
            }
            //
            @Override
            protected void onProgressUpdate(Integer... values) {
                  super.onProgressUpdate(values);
                  dialog.setProgress(values[0]);
            }
      }
}


Layout文件中 就一个textviewbutton,就不贴出了。

还有点值得注意的是 

需要在AndroidManifest.xml 清单文件中申明可以上网的权限,

<uses-permission android:name="android.permission.INTERNET"/>


运行后报错:java.io.FileNotFoundException: http://192.168.1.100/Mp3Player/log.txt

这里我犯了一个非常低级的错误,我的文件部署在tomcat下,竟然忘了加8080端口,

所以找不到文件。

运行结果:

北京联动北方科技有限公司

当进度条100%后:

北京联动北方科技有限公司

显示文本中内容,

好,例子就这么结束了。

这里讲一个问题:

北京联动北方科技有限公司

如果你是用虚拟设备运行android程序的话,当你程���已经在运行后,你又点击了run as android application 的话 那么可能报上面的错,意思是说,你要运行的activity已经处于最前面的位置了,所以本次运行不成功,那么怎么办呢?

先卸载当前的app

在命令窗口输入

北京联动北方科技有限公司

成功卸载,然后再run as application 就可以了




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论