8.2
-
商品只显示两个 ,i%2=0 的vertical,i%2=1 的horizontal。
-
笔记:
-
启动分线程有两种方式,可通过Handle对象的post方法启动Thread,也可直接调用Thread对象的start方法:new PlayThread().start(); private class PlayThread extends Thread {…}。
-
弹出带有提示文字的圆形进度对话框:
mProgressDialog = ProgressDialog.show(ProgressDialogActivity.this,
“请稍候”, “正在努力加载页面”); -
水平进度对话框:
mProgressDialog = new ProgressDialog(ProgressDialogActivity.this); mProgressDialog.setTitle("请稍候"); mProgressDialog.setMessage("正在努力加载页面"); mProgressDialog.setMax(100); mProgressDialog.setProgressStyle(style); mProgressDialog.show(); new RefreshThread().start();
-
8.3
-
回顾
-
Activity与AppCompatActivity的区别,继承AppCompatActivity时在界面最上面会出现一个ActionBar,默认显示项目的名称。去掉ActionBar:getSupportActionBar().hide();
-
图片存储 1.存在全局内存中:MainApplication.getInstance().mIconMap.put(rowid,thumb);
Bitmap thumb = BitmapFactory.decodeResource(getResources(),mThumbArray[i]); MainApplication.getInstance().mIconMap.put(rowid,thumb);//往全局内存中写入图片 iv_thumb.setImageBitmap(MainApplication.getInstance().mIconMap.get(info.rowid));//从全局内存中获取倒图片
-
2.存在SD卡中: FileUtil.saveImage(pic_path, pic); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos)
-
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/";//获取系统公共存储路径
Bitmap pic = BitmapFactory.decodeResource(getResources(), mPicArray[i]);//从数组中获取图片
String pic_path = path + rowid + ".jpg"; //设置存储路径和文件名
FileUtil.saveImage(pic_path, pic);//存储
pic.recycle();
info.pic_path = pic_path;
mGoodsHelper.update(info);//将存储位置更新到数据表中
public static void saveImage(String path, Bitmap bitmap) {//图片存储
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));//构建缓存输出流对象
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);//把位图数据压缩到缓存输出流中
bos.flush();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Bitmap pic = BitmapFactory.decodeFile(info.pic_path);//根据数据表中的路径来取图片
- 使用内部类解决多重继承的问题。
- 进度条<ProgressBar
- get请求与post请求。get请求用于从指定资源请求数据,查询字符串在URL中发送。post请求用于将数据发送到服务器来创建更新资源。
8.4
-
静态方法直接调用。
-
DownloadManage的对象从系统服务Context.DOWNLOAD_SERVICE中获取,使用过程:
-
构建下载请求:
下载请求就是DownloadManager的内部类Request
Uri uri = Uri.parse(imageUrlArray[arg2]); Request down = new Request(uri);//new一个Request对象 down.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI); down.setNotificationVisibility(Request.VISIBILITY_HIDDEN); down.setVisibleInDownloadsUi(false); down.setDestinationInExternalFilesDir(//设置下载文件在本地的保存路径 DownloadImageActivity.this, Environment.DIRECTORY_DCIM, arg2 + ".jpg");
-
进行下载操作:
mDownloadId = mDownloadManager.enqueue(down);//将下载请求加入任务队列中,等候下载
-
查询下载进度:
Query down_query = new Query(); down_query.setFilterById(mDownloadId);//根据编号过滤下载任务 Cursor cursor = mDownloadManager.query(down_query);//根据查询请求获取符合条件的结果集游标 for (;; cursor.moveToNext()) { int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME); int mediaTypeIdx = cursor.getColumnIndex(DownloadManager.COLUMN_MEDIA_TYPE); int totalSizeIdx = cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES); int nowSizeIdx = cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR); int statusIdx = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); int progress = (int) (100 * cursor.getLong(nowSizeIdx) / cursor.getLong(totalSizeIdx)); ...... tv_image_result.setText(desc);
-
8.5
-
HTTP与FTP:HTTP超文本传输协议,面向网页。FTP文件传输协议,面向文件。
-
匿名内部类是表达式,定义完后用“;”结束。
-
文件上传:上传功能需要自己写代码实现
protected String doInBackground(String... params) { String uploadUrl = params[0];//文件上传的服务器地址 String filePath = params[1];//待上传的文件地址 String result = HttpUploadUtil.upload(uploadUrl, filePath);//向服务器上传文件 return result; } public static String upload(String uploadUrl, String uploadFile) { String fileName = ""; int pos = uploadFile.lastIndexOf("/"); if (pos >= 0) { fileName = uploadFile.substring(pos + 1); } String end = "\r\n"; String Hyphens = "--"; String boundary = "WUm4580jbtwfJhNp7zi1djFEO3wNNm"; try { URL url = new URL(uploadUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); DataOutputStream ds = new DataOutputStream(conn.getOutputStream()); ds.writeBytes(Hyphens + boundary + end); ds.writeBytes("Content-Disposition: form-data; " + "name=\"file1\";filename=\"" + fileName + "\"" + end); ds.writeBytes(end); FileInputStream fStream = new FileInputStream(uploadFile); // 每次写入1024字节 int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int length = -1; // 将文件数据写入到缓冲区 while((length = fStream.read(buffer)) != -1) { ds.write(buffer, 0, length); } ds.writeBytes(end); ds.writeBytes(Hyphens + boundary + Hyphens + end); fStream.close(); ds.flush(); // 获取返回内容 InputStream is = conn.getInputStream(); int ch; StringBuffer b = new StringBuffer(); while ((ch = is.read()) != -1) { b.append((char) ch); } ds.close(); return "SUCC"; } catch (Exception e) { e.printStackTrace(); return "上传失败:" + e.getMessage(); } }
8.6
-
InetAddress 检查设备与某个网络的连通性
-
Socket的原意是“插座”,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务
-
ListView列表视图和GridView网格视图与adapter结合,显示数据。
-
ExpandableListView可折叠列表视图
8.9
-
isReachable 判断该地址是否可达可联通
-
1byte = 8bit ,两个字节构成一个汉字 = 16bit
-
String… 表示不定参数,调用这个方法时这里可以传入多个String对象
-
SeekBar拖动条
8.10
- Activity的生命周期:onCreate,onStart,onResume,onPause,onStop,onDestroy,onRestart
- Service的生命周期:onCreate,onStartCommand,onDestroy,onBind,onRebind,onUnbind
图片来自网络
-
SeekBar拖动条,ScrollView 滚动视图
-
AudioRecorder 音频录制,AudioPlayer 音频播放
-
requestWindowFeature(Window.FEATURE_NO_TITLE); 启用窗体的扩展特性
-
MedioPlayer 媒体播放器
-
get通过url来传输,不够安全,而post通过请求实体传输,安全性较高;get对传输的数据量大小有限制,而post没有。
-
URI与URL,唯一标识资源的都被称为URI。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。
-
Broadcast 广播,适配器向页面传回数据,registerReceiver注册广播,unregisterReceiver注销广播
-
实现获取APK文件中的包信息和版本,判断是否为最新版本,调用API接口下载。
8.11
-
AndroidManifest.xml文件详解:
-
cursor?,mime_type?
8.12
-
1.获取手机上App的版本信息 2.获取接口中的apk版本信息 3.通过接口下载
-
Android6.0以上版本,动态获取权限。
//动态请求读写权限 private void setPermissions() { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//版本号大于等于23 int REQUEST_CODE_CONTACT = 101;//请求码 String [] permissions = { android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE}; //验证是否许可权限 for (String str : permissions) { if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED){ this.requestPermissions(permissions,REQUEST_CODE_CONTACT); return; } } } } //回调函数 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 101) { Log.d(TAG,"权限开启成功"); }else { Log.d(TAG,"权限开启失败"); } }
-
for (String str : permissions) {…}
8.13
- String、StringBuffer、StringBuilder