最后
希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
19
20 </RelativeLayout>
因为要从网络下载数据,还要存储到本地sd卡中,所以不要忘了为程序添加网络访问的权限、网络状态访问的权限和向外部存储设备写内容的权限:
1
2
3
接着,创建一个 HttpUtils 工具类用于访问网络,代码如下:
1 package com.yztc.lx.cashimg; 2
3 import android.content.Context; 4 import android.net.ConnectivityManager; 5 import android.net.NetworkInfo; 6
7 import java.io.ByteArrayOutputStream; 8 import java.io.IOException; 9 import java.io.InputStream;
10 import java.net.HttpURLConnection;
11 import java.net.URL;
12
13 /**网络访问工具类
14 * Created by Lx on 2016/8/19.
15 */
16
17 public class HttpUtils {
18 /**
19 * 判断网络连接是否通畅
20 * @param mContext
21 * @return
22 */
23 public static boolean isNetConn(Context mContext) {
24 ConnectivityManager manager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
25 NetworkInfo info = manager.getActiveNetworkInfo();
26 if (info != null) {
27 return info.isConnected();
28 } else {
29 return false;
30 }
31 }
32
33 /**
34 * 根据path下载网络上的数据
35 * @param path 路径
36 * @return 返回下载内容的byte数据形式
37 */
38 public static byte[] getDateFromNet(String path) {
39 ByteArrayOutputStream baos = new ByteArrayOutputStream();
40 try {
41 URL url = new URL(path);
42 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
43 conn.setRequestMethod(“GET”);
44 conn.setConnectTimeout(5000);
45 conn.setDoInput(true);
46 conn.connect();
47 if (conn.getResponseCode()==200) {
48 InputStream is = conn.getInputStream();
49 byte b[] = new byte[1024];
50 int len;
51 while ((len=is.read(b))!=-1) {
52 baos.write(b, 0, len);
53 }
54 return baos.toByteArray();
55 }
56 } catch (IOException e) {
57 e.printStackTrace();
58 }
59 return baos.toByteArray();
60 }
61
62 }
还有操作外部存储的工具类:
1 package com.yztc.lx.cashimg; 2
3 import android.graphics.Bitmap; 4 import android.graphics.BitmapFactory; 5 import android.os.Environment; 6
7 import java.io.ByteArrayOutputStream; 8 import java.io.File; 9 import java.io.FileInputStream;
10 import java.io.FileOutputStream;
11 import java.io.IOException;
12
13 /**
14 * Created by Lx on 2016/8/20.
15 */
16
17 public class ExternalStorageUtils {
18 /**
19 * 将传递过来的图片byte数组存储到sd卡中
20 * @param imgName 图片的名字
21 * @param buff byte数组
22 * @return 返回是否存储成功
23 */
24 public static boolean storeToSDRoot(String imgName, byte buff[]) {
25 boolean b = false;
26 String basePath = Environment.getExternalStorageDirectory().getAbsolutePath();
27 File file = new File(basePath, imgName);
28 try {
29 FileOutputStream fos = new FileOutputStream(file);
30 fos.write(buff);
31 fos.close();
32 b = true;
33 } catch (IOException e) {
34 e.printStackTrace();
35 }
36 return b;
37 }
38
39 /**
40 * 从本地内存中根据图片名字获取图片
41 * @param imgName 图片名字
42 * @return 返回图片的Bitmap格式
43 */
44 public static Bitmap getImgFromSDRoot(String imgName) {
45 Bitmap bitmap = null;
46 String basePath = Environment.getExternalStorageDirectory().getAbsolutePath();
47 File file = new File(basePath, imgName);
48 try {
49 FileInputStream fis = new FileInputStream(file);
50 ByteArrayOutputStream baos = new ByteArrayOutputStream();
51 byte b[] = new byte[1024];
52 int len;
53 while ((len = fis.read(b)) != -1) {
54 baos.write(b, 0, len);
55 }
56 byte buff[] = baos.toByteArray();
57 if (buff != null && buff.length != 0) {
58 bitmap = BitmapFactory.decodeByteArray(buff, 0, buff.length);
59 }
60 } catch (IOException e) {
61 e.printStackTrace();
62 }
63 return bitmap;
64 }
65
66
67 }
本例中将图片默认存在了sd卡根目录中。
然后是最主要的主函数了:
1 package com.yztc.lx.cashimg; 2
3 import android.graphics.Bitmap; 4 import android.graphics.BitmapFactory; 5 import android.os.Bundle; 6 import android.os.Handler; 7 import android.os.Message; 8 import android.support.v7.app.AppCompatActivity; 9 import android.util.Log; 10 import android.util.LruCache; 11 import android.view.View; 12 import android.widget.Button; 13 import android.widget.ImageView; 14 import android.widget.Toast; 15
16 import java.lang.ref.SoftReference; 17 import java.util.LinkedHashMap; 18
19 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 20
21 private Button btn_download; 22 private ImageView iv_img; 23 private MyLruCache myLruCache; 24 private LinkedHashMap<String, SoftReference> cashMap = new LinkedHashMap<>();
25 private static final String TAG = “MainActivity”;
26 private String imgPath = “http://www.3dmgame.com/UploadFiles/201212/Medium_20121217143424221.jpg”;
27 private Handler handler = new Handler() { 28 @Override
29 public void handleMessage(Message msg) { 30 Bitmap bitmap = (Bitmap) msg.obj; 31 iv_img.setImageBitmap(bitmap);
32 Toast.makeText(MainActivity.this, “从网络上下载图片”, Toast.LENGTH_SHORT).show();
33 }
34 };
35
36 @Override
37 protected void onCreate(Bundle savedInstanceState) { 38 super.onCreate(savedInstanceState);
39 setContentView(R.layout.activity_main);
40 initView();
41 int totalMemory = (int) Runtime.getRuntime().maxMemory();
42 int size = totalMemory / 8;
43 myLruCache = new MyLruCache(size); 44 btn_download.setOnClickListener(this);
45 }
46
47 private void initView() { 48 btn_download = (Button) findViewById(R.id.btn_download); 49 iv_img = (ImageView) findViewById(R.id.iv_img); 50 }
51
52 @Override
53 public void onClick(View v) { 54 Bitmap b = getImgCache(); 55 if (b != null) {
56 iv_img.setImageBitmap(b);
57 } else { 58 new Thread(new Runnable() { 59 @Override
60 public void run() { 61 if (HttpUtils.isNetConn(MainActivity.this)) {
62 byte b[] = HttpUtils.getDateFromNet(imgPath); 63 if (b != null && b.length != 0) {
64 Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
65 Message msg = Message.obtain(); 66 msg.obj = bitmap; 67 handler.sendMessage(msg);
68 myLruCache.put(imgPath, bitmap);
69 Log.d(TAG, "run: " + “缓存到强引用中成功”);
70 boolean bl = ExternalStorageUtils.storeToSDRoot(“haha.jpg”, b);
71 if (bl) { 72 Log.d(TAG, "run: " + “缓存到本地内存成功”);
73 } else { 74 Log.d(TAG, "run: " + “缓存到本地内存失败”);
75 }
76 } else { 77 Toast.makeText(MainActivity.this, “下载失败!”, Toast.LENGTH_SHORT).show();
78 }
79
80 } else { 81 Toast.makeText(MainActivity.this, “请检查你的网络!”, Toast.LENGTH_SHORT).show();
82 }
83 }
84 }).start();
85 }
86 }
87
88 /**
写在最后
对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。
![
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
459598-3e1bbd9b84cc0ef9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
[外链图片转存中…(img-5M4k6Lmj-1715611113447)]
[外链图片转存中…(img-TenOsj3c-1715611113447)]
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!