博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;
🍅文章末尾获取源码下载方式🍅
目录
源码下载:
一、项目介绍
管理员身份功能介绍:
1:用户登录:用户通过账号信息进行软件的登录
2:景点管理:用户可以对景点信息进行添加的修改
3:城市管理:用户可以对城市信息进行添加的修改用户功能介绍:
1:注册模块,用户在使用软件前需要进行用户信息的注册
2:用户登录:用户通过自己的注册信息进行软件的登录
3:景点查询:用户登录之后可以查询发布的景点信息
4:景点详情:用户可以查看景点的详情信息
5:城市信息:用户可以查看城市信息,以及通过城市信息对景点进行查询
6:我的收藏:用户可以对自己感兴趣的景点进行收藏
7:个人信息:用户可以浏览个人信息,以及对密码进行修改;
二、运行环境
1:软件使用Android stuido进行开发;
2:使用sqlite本地数据库进行数据的存储;3:需要jdk1.7以上
4:使用雷电模拟器或者Androidstuio自带的模拟器进行运行
三、功能运行演示
四、部分代码
1:添加景点信息
public class CreatSceneryActivity extends BaseActivity {
// 标题
private TextView mTvTitle;
// 返回
private ImageView mIvBack,guide_image;
private Button mSubmit;
private EditText et1,et2,et3,et4;
private TextView mtvchoice;
private List<City> mlistData = new ArrayList<City>();
private DialogListMsg dialogListMsg;
private ChoiceTypeAdapter listaAdapter;
private DialogMsg dialogMsg;
private static final int REQUEST_CODE_SCAN_GALLERY = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_box);
initWidget();
initData();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mIvBack:
finish();
break;
case R.id.mtvchoice:
dialogListMsg.Show();
break;
case R.id.mSubmit:
Scenery box=new Scenery();
box.setCityId(mlistData.get(posIndex).getId());
box.setCityName(mlistData.get(posIndex).getCityTitle());
box.setSceneryTitle(et1.getText().toString());
box.setSceneryMoney(et2.getText().toString());
box.setSceneryAddress(et3.getText().toString());
box.setSceneryMsg(et4.getText().toString());
box.setSceneryImage(imagePath);
box.save();
CustomToast.showToast(this, "添加成功");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
CreatSceneryActivity.this.finish();
}
}, 1000);
break;
case R.id.guide_image:
Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT"
innerIntent.setType("image/*");
startActivityForResult(innerIntent, REQUEST_CODE_SCAN_GALLERY);
break;
}
}
@Override
public void initWidget() {
et1 =(EditText) findViewById(R.id.et1);
et2 =(EditText) findViewById(R.id.et2);
et3 =(EditText) findViewById(R.id.et3);
et4 =(EditText) findViewById(R.id.et4);
et1.setText("");
et2.setText("50");
et3.setText("西安市雁塔区");
et4.setText("大雁塔位于唐长安城晋昌坊(今陕西省西安市南)的大慈恩寺内,又名“慈恩寺塔”。唐永徽三年(652年),玄奘为保存由天竺经丝绸之路带回长安的经卷佛像主持修建了大雁塔,最初五层,后加盖至九层,再后层数和高度又有数次变更,最后固定为所看到的七层塔身,通高64.517米,底层边长25.5米。");
mdialog = new LoadingDialog(this, "上传图片...");
mSubmit = (Button) findViewById(R.id.mSubmit);
mIvBack = (ImageView) findViewById(R.id.mIvBack);
mTvTitle = (TextView) findViewById(R.id.mTvTitle);
mTvTitle.setText("添加景区信息");
mIvBack.setVisibility(View.VISIBLE);
mIvBack.setOnClickListener(this);
mSubmit.setOnClickListener(this);
mtvchoice = (TextView) findViewById(R.id.mtvchoice);
mtvchoice.setOnClickListener(this);
guide_image = (ImageView) findViewById(R.id.guide_image);
guide_image.setOnClickListener(this);
}
private int posIndex;
@Override
public void initData() {
dialogMsg = new DialogMsg(this);
dialogListMsg = new DialogListMsg(this);
dialogListMsg.setTitle().setText("请选择所在城市");
listaAdapter = new ChoiceTypeAdapter(this);
mlistData = City.listAll(City.class);
listaAdapter.setData(mlistData);
dialogListMsg.show_listview().setAdapter(listaAdapter);
dialogListMsg.show_listview().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
posIndex = i;
mtvchoice.setText(mlistData.get(posIndex).getCityTitle());
dialogListMsg.Close();
}
});
dialogListMsg.submit_no().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialogListMsg.Close();
}
});
}
Uri uriInfor;
String imagePath;
public void onActivityResult(final int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_CODE_SCAN_GALLERY:
uriInfor = data.getData();
imagePath = getRealPathFromUri(this, data.getData());
String cameraPath = imagePath;
Bitmap bitmap = BitmapFactory.decodeFile(cameraPath);
guide_image.setImageBitmap(bitmap);
Log.i("pony_log","imagePath:"+imagePath);
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 根据图片的Uri获取图片的绝对路径(已经适配多种API)
*
* @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null
*/
public static String getRealPathFromUri(Context context, Uri uri) {
int sdkVersion = Build.VERSION.SDK_INT;
if (sdkVersion < 11) {
// SDK < Api11
return getRealPathFromUri_BelowApi11(context, uri);
}
if (sdkVersion < 19) {
// SDK > 11 && SDK < 19
return getRealPathFromUri_Api11To18(context, uri);
}
// SDK > 19
return getRealPathFromUri_AboveApi19(context, uri);
}
/**
* 适配api19以上,根据uri获取图片的绝对路径
*/
private static String getRealPathFromUri_AboveApi19(Context context, Uri uri) {
String filePath = null;
String wholeID = DocumentsContract.getDocumentId(uri);
// 使用':'分割
String id = wholeID.split(":")[1];
String[] projection = {MediaStore.Images.Media.DATA};
String selection = MediaStore.Images.Media._ID + "=?";
String[] selectionArgs = {id};
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection,
selection, selectionArgs, null);
int columnIndex = cursor.getColumnIndex(projection[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
return filePath;
}
/**
* 适配api11-api18,根据uri获取图片的绝对路径
*/
private static String getRealPathFromUri_Api11To18(Context context, Uri uri) {
String filePath = null;
String[] projection = {MediaStore.Images.Media.DATA};
CursorLoader loader = new CursorLoader(context, uri, projection, null,
null, null);
Cursor cursor = loader.loadInBackground();
if (cursor != null) {
cursor.moveToFirst();
filePath = cursor.getString(cursor.getColumnIndex(projection[0]));
cursor.close();
}
return filePath;
}
/**
* 适配api11以下(不包括api11),根据uri获取图片的绝对路径
*/
private static String getRealPathFromUri_BelowApi11(Context context, Uri uri) {
String filePath = null;
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(uri, projection,
null, null, null);
if (cursor != null) {
cursor.moveToFirst();
filePath = cursor.getString(cursor.getColumnIndex(projection[0]));
cursor.close();
}
return filePath;
}
}
2:查看景点信息
public class SceneryMessageActivity extends BaseActivity {
// title
private TextView mTvTitle, mIvStu;
// 返回
private ImageView mIvBack;
// 查询按钮
private TextView mtvtitle;
private TextView mtvcontentZhuSu;
private Scenery sceneryModel;
private TextView mtvtime;
private RelativeLayout mllbottom;
private Button mbtnPay,mbtndelete;
private TextView mtvShopPrice;
private TextView courseLength;
private ImageView guide_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_projectlistview);
initWidget();
initData();
}
@Override
public void initWidget() {
guide_image = (ImageView) findViewById(R.id.guide_image);
guide_image.setOnClickListener(this);
mIvStu = (TextView) findViewById(R.id.mIvStu);
mIvStu.setVisibility(View.VISIBLE);
mIvStu.setOnClickListener(this);
mbtnPay = (Button) findViewById(R.id.mbtnPay);
mbtndelete = (Button) findViewById(R.id.mbtndelete);
mbtndelete.setOnClickListener(this);
mllbottom = (RelativeLayout) findViewById(R.id.mllbottom);
mtvcontentZhuSu = (TextView) findViewById(R.id.mtvcontentZhuSu);
mtvtitle = (TextView) findViewById(R.id.mtvtitle);
mIvBack = (ImageView) findViewById(R.id.mIvBack);
mTvTitle = (TextView) findViewById(R.id.mTvTitle);
mTvTitle.setText("详情信息");
mIvBack.setVisibility(View.VISIBLE);
mIvBack.setOnClickListener(this);
mbtnPay.setOnClickListener(this);
mtvShopPrice = (TextView) findViewById(R.id.mtvShopPrice);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mIvBack:
SceneryMessageActivity.this.finish();
break;
case R.id.mbtnPay:
Intent mbtnPay = new Intent(this, UpdateSceneryActivity.class);
mbtnPay.putExtra("msg",sceneryModel);
startActivity(mbtnPay);
finish();
break;
case R.id.mbtndelete:
Scenery delete = Scenery.findById(Scenery.class, sceneryModel.getId());
delete.delete();
ToastUtil.ShowToast(this, "删除成功");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 1000);
break;
case R.id.mIvStu:
if (collectState.size()==0) {
Collect box=new Collect();
box.setCityId(sceneryModel.getCityId());
box.setCityName(sceneryModel.getCityName());
box.setSceneryTitle(sceneryModel.getSceneryTitle());
box.setSceneryMoney(sceneryModel.getSceneryMoney());
box.setSceneryAddress(sceneryModel.getSceneryAddress());
box.setSceneryMsg(sceneryModel.getSceneryMsg());
box.setSceneryImage(sceneryModel.getSceneryImage());
box.setSceneryId(sceneryModel.getId());
box.setUserId(Long.valueOf(MemberUserUtils.getUid(this)));
box.save();
ToastUtil.ShowToast(this, "收藏成功");
mIvStu.setText("已收藏");
}else{
Collect collect = Collect.findById(Collect.class, collectState.get(0).getId());
collect.delete();
ToastUtil.ShowToast(this, "取消收藏");
mIvStu.setText("未收藏");
}
break;
}
}
List<Collect> collectState;
@Override
public void initData() {
sceneryModel = (Scenery) this.getIntent().getSerializableExtra("msg");
mtvtitle.setText(sceneryModel.getSceneryTitle());
mtvcontentZhuSu.setText("景区地址:" + sceneryModel.getSceneryAddress()+"\n景区介绍:" + sceneryModel.getSceneryMsg());
mtvShopPrice.setText(sceneryModel.getSceneryMoney());
Bitmap bitmap = BitmapFactory.decodeFile(sceneryModel.getSceneryImage());
guide_image.setImageBitmap(bitmap);
collectState = Collect.findWithQuery(Collect.class, "Select * from Collect where userId = " + MemberUserUtils.getUid(this) + " and sceneryId= " + sceneryModel.getId());
if (collectState.size()==0) {
mIvStu.setText("未收藏");
}else{
mIvStu.setText("已收藏");
}
}
}
五、更多Android课程设计
六、注意事项
如果遇到数据库未初始化的情况,解决办法如下:
1:Android Studio的Settings
2:在Android Studio在搜索框输入Instant Run(或者File——Settings——Build, Execution,Deployment——Instant Run
)3:可以看到如下信息,第一排的Enable Instant Run to hot swap code/resource changes on deploy(default enabled)默认是有√的
4)现在将√去掉就OK了!
七、源码获取
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
1:V信搜索“毕业设计小码哥”,也可以关注下方公众号,然后点击菜单栏“源码说明-源码下载”
2:点击小程序下面截图
3:选择Android就可以看到下载源码