<code class="hljs java has-numbering">因为是对互联网和内存操作,所以我们要添加如下权限: <span class="hljs-comment">//代码如下所示:</span> <span class="hljs-keyword">package</span> com.itfom.getpicfromnet; <span class="hljs-keyword">import</span> java.io.File; <span class="hljs-keyword">import</span> java.io.FileOutputStream; <span class="hljs-keyword">import</span> java.io.InputStream; <span class="hljs-keyword">import</span> java.net.HttpURLConnection; <span class="hljs-keyword">import</span> java.net.URL; <span class="hljs-keyword">import</span> android.annotation.SuppressLint; <span class="hljs-keyword">import</span> android.app.Activity; <span class="hljs-keyword">import</span> android.graphics.BitmapFactory; <span class="hljs-keyword">import</span> android.os.Bundle; <span class="hljs-keyword">import</span> android.os.Environment; <span class="hljs-keyword">import</span> android.os.Handler; <span class="hljs-keyword">import</span> android.os.Message; <span class="hljs-keyword">import</span> android.view.View; <span class="hljs-keyword">import</span> android.view.View.OnClickListener; <span class="hljs-keyword">import</span> android.widget.Button; <span class="hljs-keyword">import</span> android.widget.ImageView; <span class="hljs-annotation">@SuppressLint</span>(<span class="hljs-string">"HandlerLeak"</span>) <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MainActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span> <span class="hljs-keyword">private</span> ImageView iv_pic; <span class="hljs-keyword">private</span> Button btn_get; <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) { <span class="hljs-keyword">super</span>.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_get = (Button) findViewById(R.id.btn_get); iv_pic = (ImageView) findViewById(R.id.iv_img); <span class="hljs-comment">//设置监听事件</span> btn_get.setOnClickListener(<span class="hljs-keyword">new</span> OnClickListener() { <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onClick</span>(View v) { <span class="hljs-comment">//开启子线程</span> <span class="hljs-keyword">new</span> Thread(){ <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span>() { <span class="hljs-keyword">try</span> { String urlPath = <span class="hljs-string">"http://pic7.nipic.com/20100607/4791134_172835008083_2.jpg"</span>; URL url = <span class="hljs-keyword">new</span> URL(urlPath); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(<span class="hljs-number">6</span>*<span class="hljs-number">1000</span>); <span class="hljs-comment">// 注意要设置超时,设置时间不要超过10秒,避免被android系统回收</span> <span class="hljs-keyword">if</span> (conn.getResponseCode() != <span class="hljs-number">200</span>) <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">"请求url失败"</span>); InputStream inSream = conn.getInputStream(); <span class="hljs-comment">//把图片保存到项目的根目录</span> readAsFile(inSream, <span class="hljs-keyword">new</span> File(Environment.getExternalStorageDirectory()+<span class="hljs-string">"/"</span>+<span class="hljs-string">"test.jpg"</span>)); Message msg=<span class="hljs-keyword">new</span> Message(); msg.what=<span class="hljs-number">0</span>; handler.sendMessage(msg); } <span class="hljs-keyword">catch</span> (Exception e) { e.printStackTrace(); } }; }.start(); } }); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">readAsFile</span>(InputStream inSream, File file) <span class="hljs-keyword">throws</span> Exception{ FileOutputStream outStream = <span class="hljs-keyword">new</span> FileOutputStream(file); <span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>]; <span class="hljs-keyword">int</span> len = -<span class="hljs-number">1</span>; <span class="hljs-keyword">while</span>( (len = inSream.read(buffer)) != -<span class="hljs-number">1</span> ){ outStream.write(buffer, <span class="hljs-number">0</span>, len); } outStream.close(); inSream.close(); } <span class="hljs-comment">//创建Handler</span> Handler handler=<span class="hljs-keyword">new</span> Handler(){ <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleMessage</span>(android.os.Message msg) { <span class="hljs-keyword">if</span>(msg.what==<span class="hljs-number">0</span>){ <span class="hljs-comment">//开始绑定数据</span> iv_pic.setImageBitmap(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+<span class="hljs-string">"/test.jpg"</span>)); <span class="hljs-comment">// 获取保存到根目录的图片并展示</span> } }; }; }</code> <ul class="pre-numbering" style=""></ul>
<code class="hljs java has-numbering"><span class="hljs-javadoc">/** * 保存到本地文件 *<span class="hljs-javadoctag"> @param</span> inSream *<span class="hljs-javadoctag"> @param</span> file *<span class="hljs-javadoctag"> @throws</span> Exception * readAsFile(inSream, new File(Environment.getExternalStorageDirectory()+"/"+"test.jpg")); * iv_pic.setImageBitmap(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/test.jpg")); 获取 */</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">readAsFile</span>(InputStream inSream, File file) <span class="hljs-keyword">throws</span> Exception{ FileOutputStream outStream = <span class="hljs-keyword">new</span> FileOutputStream(file); <span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>]; <span class="hljs-keyword">int</span> len = -<span class="hljs-number">1</span>; <span class="hljs-keyword">while</span>( (len = inSream.read(buffer)) != -<span class="hljs-number">1</span> ){ outStream.write(buffer, <span class="hljs-number">0</span>, len); } outStream.close(); inSream.close(); }</code>
权限:
<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.READ_EXTERNAL_STORAGE"</span>></span><span class="hljs-tag"></<span class="hljs-title">uses-permission</span>></span> <span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.WRITE_EXTERNAL_STORAGE"</span>></span><span class="hljs-tag"></<span class="hljs-title">uses-permission</span>></span></code>