图片分享软件
简要功能介绍:用户可将图片分享至平台以供其他用户浏览,用户可对喜欢的图片进行点赞保存分享等操作。
思路如下:
- 界面设计:登录界面与注册界面,还有登录成功后的首页,发布页和主页,可以通过底部导航栏跳转到对应的界面。
- 对应功能的一一实现。数据可以保存在数据库中,采用到的技术是SQLite(本程序是保存到手机本地的数据库中,云端的可以自己摸索)。分享操作这里使用的是android自带的分享。
- 需要为该软件进行授权。主要授权文件的读写权限。
界面展示
登录界面
注册界面
用户注册并且登录成功的个人信息主页
(这里可以自行添加需要的功能)
发布图片详细信息
首页界面
图片详细信息以及对该图片的操作
软件的封面
关键代码
AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 获取创建、删除文件 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
用户数据暂时保存在SharePreferences
//当登陆成功了,强制保存到SharePreferences里面
String spFileName = getResources()//获取当前活动的文件名
.getString(R.string.shared_preferences_file_name);
String accountKey = getResources()//用户的账号
.getString(R.string.login_account_name);
String passwordKey = getResources()//登陆密码
.getString(R.string.login_password);
SharedPreferences spFile = getSharedPreferences(
spFileName,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = spFile.edit();
//将账户名和密码为一对,写入安卓自带的SharedPreferences文件里面
editor.putString(accountKey, userName);
editor.putString(passwordKey, passWord);
editor.apply();
向数据库中插入用户信息
SQLiteDatabase db= userdb.getWritableDatabase();
//contenvalues只能存储基本类型的数据,像string,int之类的
ContentValues values=new ContentValues();
values.put("id",username);
values.put("password",password1);
values.put("touxiang",image);
db.insert("users",null,values);
db.close();
return true;
获取系统图片信息
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//requestCode是用来标识请求的来源(这里是图片点击事件,标识为1), resultCode是用来标识返回的数据来自哪一个activity
super.onActivityResult(requestCode, resultCode, data);
//获取图片路径
if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
Uri selectedImage = data.getData();//选择照片
String[] filePathColumns = {MediaStore.Images.Media.DATA};//获取图片路径
Cursor c = getContentResolver().query(selectedImage, filePathColumns, null, null, null);
c.moveToFirst();//正确指向第一个位置
int columnIndex = c.getColumnIndex(filePathColumns[0]);
String imagePath = c.getString(columnIndex);
showImage(imagePath);
c.close();
}
}
private void showImage(String imagePath) {
bm = BitmapFactory.decodeFile(imagePath);//通过BitmapFactory.decodeFile(imagePath)方法来加载图片
ByteArrayOutputStream baos = new ByteArrayOutputStream();//字符串输出流
//三个参数分别是压缩后的图像的格式(png),图像显示的质量(0—100),100表示最高质量,图像处理的输出流(baos)。
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
image = baos.toByteArray();//接收读取到的字符,即图片的路径
chooseImage.setImageBitmap(bm);//设置头像
}