写一个下载文件的,发觉运行起来总是错误,我一共有三个类
这是第一个package com.siyehuazhilian.download;import java.io.IOException;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {
// 声明控件对象
private Button textButton = null;
private Button allFileButton = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 通过id来得到对应的控件
textButton = (Button) findViewById(R.id.button_downtxt);
allFileButton = (Button) findViewById(R.id.button_downallfile); // 为button控件设置对应的监听器
textButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { }
});
allFileButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
HttpDownFile downURLFile = new HttpDownFile();
try {
downURLFile
.downFile(
"http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
"siyehua", "123.jpg");
} catch (IOException e) {
e.printStackTrace();
}
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}
android 文件下载
这是第一个package com.siyehuazhilian.download;import java.io.IOException;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {
// 声明控件对象
private Button textButton = null;
private Button allFileButton = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 通过id来得到对应的控件
textButton = (Button) findViewById(R.id.button_downtxt);
allFileButton = (Button) findViewById(R.id.button_downallfile); // 为button控件设置对应的监听器
textButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { }
});
allFileButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
HttpDownFile downURLFile = new HttpDownFile();
try {
downURLFile
.downFile(
"http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
"siyehua", "123.jpg");
} catch (IOException e) {
e.printStackTrace();
}
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}
android 文件下载
这个是错误package com.siyehuazhilian.download;import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;/**
* FileDownLoad文件下载类
*
* @author Administrator
*
*/
public class HttpDownFile {
private URL url = null; /**
* 下载文本文件
*
* @param
* @author Administrator
* @return
* @throws IOException
*/
public String downTextFile(String urlStr) throws IOException {
// 新建一个StringBuffer用来存储得到的文本
StringBuffer stringBuffer = new StringBuffer();
String line = null; // 得到对应的url
url = new URL(urlStr);
URLConnection urlConnection = url.openConnection(); // 创建一个输入流
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream())); while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
} // 关闭输入流
bufferedReader.close(); return stringBuffer.toString();
} /**
* 下载任意文件:0表示下载文件出错,1表示下载成功
*
* @throws IOException
*/
public int downFile(String urlStr, String filePath, String fileName)
throws IOException {
url = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
InputStream inputStream = urlConnection.getInputStream(); // 把下载来的文件存放到sd卡中
SdCardFile cardFile = new SdCardFile();
cardFile.writeDataToSdCard(filePath, fileName, inputStream); inputStream.close();
return 1;
}
}
package com.siyehuazhilian.download;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;import android.os.Environment;/**
* 访问sd卡类
*
* @author Administrator
*
*/
public class SdCardFile {
private String SDCARDPATH; public String getSDCARDPATH() {
return SDCARDPATH;
} public SdCardFile() {
// 新建这个类时,自动初始化得到sd的文件路径
SDCARDPATH = Environment.getExternalStorageDirectory() + "/";
} /**
* 在sdCard中创建文件
*
* @throws IOException
*/
public File createFile(String fileName) throws IOException {
File file = new File(SDCARDPATH + fileName);
file.createNewFile();
return file;
} /**
* 在SdCard中创建目录
*/
public File createDeirectory(String dirName) {
File file = new File(SDCARDPATH + dirName);
file.mkdirs();
return file;
} /**
* 判断文件是否存在
*/
public boolean isFileExist(String fileName) {
File file = new File(SDCARDPATH + fileName);
return file.exists();
} /**
* 把一个数据写入到sd卡中
*
* @throws IOException
*
*/
public File writeDataToSdCard(String filePath, String fileName,
InputStream inputStream) throws IOException {
if (isFileExist(fileName)) {
fileName = fileName + new Random().nextLong();
}
File file = new File(SDCARDPATH + filePath + "/" + fileName); OutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
} outputStream.close();
return file;
}}
不懂求解
allFileButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
(new Thread() {//注意这一段 @Override
public void run() {
super.run();
HttpDownFile downURLFile = new HttpDownFile();
try {
downURLFile
.downFile(
"http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
"siyehua", "123.jpg");
} catch (IOException e) {
e.printStackTrace();
}
} }).start(); }
});
不懂求解
allFileButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
(new Thread() {//注意这一段 @Override
public void run() {
super.run();
HttpDownFile downURLFile = new HttpDownFile();
try {
downURLFile
.downFile(
"http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
"siyehua", "123.jpg");
} catch (IOException e) {
e.printStackTrace();
}
} }).start(); }
});
也就是说新建一个线程,来运行,对吗?
那我不建立匿名内部类,新建一个类来继承OnClickListener接口.
然后再把这个类的对象设置给button做监听器,算是在子线程运行吗?
new Thread(){
public void run() {
//你要处理的
}
}.start();
android 为了UI线程安全,在UI主线程不允许执行类似交互网络的比较费时的操作。