提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
简介
本项目是安卓课设完成作品。
项目实现了一套完整的前后端系统,实现前后端分离。后端基于Flask框架,采用Python语言进行搭建服务器,用户的图片、相册、个人信息等数据保存在云端的数据库中,Android前端采用Java语言,通过Okhttp与后端进行网络请求交互,两者通过商定好的API接口进行数据传递,整体UI设计遵循Material Design规范风格。Android端主界面包括查看图片、用户个人中心模块,支持用户分享图片、对喜欢的图片点赞、收藏以及下载喜欢的图片等功能。
用户注册登录帐号后,可以分享自己的本地图片上传到后台服务器,用户在首页可以查看平台上其它用户分享的图片,浏览图片详情,对各个图片进行点赞、下载等功能,用户还可以将自己喜欢的图片保存到本地。
一、怎么做的?
总体框架图:
数据库设计
数据库具体实现:
用户表:
用户点赞表:
前端代码设计:
此处放部分代码,具体设计详情见代码资料包
public class MainActivity extends BaseActivity {
private TextView mainText;
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.INTERNET};
AlertDialog alertDialog;
private final int permissionCode = 100;//权限请求码
@Override
//加载布局
protected int initLayout() {
return R.layout.activity_main;
//6.0才用动态权限
}
//检查权限
private void checkPermission() {
List<String> permissionList = new ArrayList<>();
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permissions[i]);
}
}
if (permissionList.size() <= 0) {
//说明权限都已经通过,可以做你想做的事情去
} else {
//存在未允许的权限
ActivityCompat.requestPermissions(this, permissions, permissionCode);
}
}
//授权后回调函数
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean haspermission = false;
if (permissionCode == requestCode) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
haspermission = true;
}
}
if (haspermission) {
//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
permissionDialog();
} else {
//全部权限通过,可以进行下一步操作
}
}
}
//打开手动设置应用权限
private void permissionDialog() {
if (alertDialog == null) {
alertDialog = new AlertDialog.Builder(this)
.setTitle("提示信息")
.setMessage("当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。")
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cancelPermissionDialog();
Uri packageURI = Uri.parse("package:" + getPackageName());
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
startActivity(intent);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cancelPermissionDialog();
}
})
.create();
}
alertDialog.show();
}
//用户取消授权
private void cancelPermissionDialog() {
alertDialog.cancel();
}
@Override
//找到组件
protected void initView() {
if (Build.VERSION.SDK_INT >= 23) {
checkPermission();
}
mainText = findViewById(R.id.main_text);
Typeface fontFace = Typeface.createFromAsset(getAssets(),
"hkww.ttf");
mainText.setTypeface(fontFace);
}
@Override
//绑定事件
protected void initData() {
String token = GetStringFromSP("token");
Integer time = 2000;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(!StringUtils.IsEmpty(token)) {
navgateTo(HomeActivity.class);
finish();
}
else {
navgateTo(LoginActivity.class);
finish();
}
}
}, time);
}
}
二、实现效果
登录界面
注册界面:
分享照片界面及保存:
点赞:
上传图片:
总结
由于篇幅原因,主要是展示效果,详情见代码包链接