本篇所注意的是文档路径,清单配置权限。测试的话,汲取教训一定要确定好是下载的路径在搞起。方法:复制粘贴下载路径在IE栏里回车,弹出下载框就是下载路径,
这里还有些待优化,下载文件路径用字符串截取获得文件名,保存到本地。如果在线程中用户并发下载量大,需要再次做判断.ps有会做判断的大神路过留下笔记,感激不尽。
1,知识点一,File file = new File(getCacheDir(),"wenjianming.jpg");//ps记住第二个参数是文件名,搞了1个多小时才明白这里错了
2,知识点二,Bitmap bit = BitmapFactory.decodeFile(file.getAbsolutePath()); //ps这个意思是工厂模式直接读取绝对路径的图片
3,知识点三,iv.setImageBitmap(bit);//ps这个方法也可以直接显示到页面,而且方便的是不用写流从本地读取了
代码如下:
通过点击事件跳转到另一个执行
package com.example.imagedemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.ImageView; /** * * 点击按钮,跳转到otherActivity中显示 * */ public class MainActivity extends Activity { private EditText et ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText) findViewById(R.id.main_et); } // 按钮的点击事件 public void sendImage(View v){ String path = "http://imgstore01.cdn.sogou.com/v2/thumb/dl/8057062.jpg?appid=10150005&url=http://img02.sogoucdn.com/app/a/100520021/e6347472383355ae7a43795c035073ad"; Intent intent = new Intent(); // 显示跳转,this是本类对象,class是跳转的目标文件 intent.setClass(this, otherActivity.class); // 传参数跟Map集合一样,是键值对 intent.putExtra("key", path); // 无返回值跳转 startActivity(intent); } }
2,跳转过来后的Activity
package com.example.imagedemo; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.ImageView; import android.widget.Toast; public class otherActivity extends Activity { private ImageView iv; private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { if (msg.what==1) { // 相等把位图显示至页面上 Bitmap bit = (Bitmap) msg.obj; iv.setImageBitmap(bit); }else{ Toast.makeText(otherActivity.this, "读取失败",0).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // 加载的这个布局 setContentView(R.layout.ohter_act); iv = (ImageView) findViewById(R.id.main_iv); // 接收 resiver(); } private void resiver() { // 接收参数 Intent intent = getIntent(); final String str = intent.getStringExtra("key"); final File file = new File(getCacheDir(),"fdfsa.jpg"); // 判断文件是否存在,存在从流里读取数据 if (file.exists()) { Log.i("gxx", "如果存在从缓存中读取"); // 存在直接更新UI Bitmap bit = BitmapFactory.decodeFile(file.getAbsolutePath()); iv.setImageBitmap(bit); // return; }else{ Thread t = new Thread(){ @Override public void run() { // 网络请求 HttpClient client = new DefaultHttpClient(); // 请求方式 HttpGet get = new HttpGet(str); // 客户端请求获取响应对象 try { HttpResponse response = client.execute(get); // 获取实体对象 HttpEntity entity = response.getEntity(); // 用读取流 InputStream is = entity.getContent(); // 写入本地 OutputStream os = new FileOutputStream(file); byte[] b = new byte[1024]; int len = -1; while ((len = is.read(b))!=-1) { os.write(b, 0, len); Log.i("gxx", "执行到此处"); os.flush(); } os.close(); // 读取出流里的数据,并构成位图对象 Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath()); // 发送消息 Message msg = handler.obtainMessage(); msg.obj = bm; msg.what = 1; handler.sendMessage(msg); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start(); } } }