在命令窗口输入ipconfig,查看本地ip
这个ip在android代码里下载中有用。
不能以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文件中 就一个textview和button,就不贴出了。
还有点值得注意的是
需要在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 就可以了