Merge pull request '1' (#3) from zzw_branch into develop

pull/4/head
prjkshgn8 2 years ago
commit 6666509e3e

@ -0,0 +1,94 @@
package com.example.sleep;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.util.Base64;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.sleep.database.dao.DatabaseManager;
import java.io.ByteArrayOutputStream;
public class EditScreen extends FragmentActivity {
private ImageView showImage;
private ImageView postImage;
private String imageUrl;
private EditText messageEdit;
private Bitmap bitmap;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.event_content_activity);
Bundle extras = getIntent().getExtras();
boolean isPhoto = getIntent().getBooleanExtra("isPhoto", false);
postImage = findViewById(R.id.event_content_post);
messageEdit = findViewById(R.id.event_content);
showImage = findViewById(R.id.event_image);
// 根据传入的数据决定是否显示图片
if (isPhoto) {
imageUrl = getIntent().getStringExtra("bitmapImageString");
Bitmap bitmap = BitmapFactory.decodeFile(imageUrl);
showImage.setImageBitmap(bitmap);
} else {
if (extras != null) {
bitmap = extras.getParcelable("bitmapImage");
if (bitmap != null) {
showImage.setImageBitmap(bitmap);
}
}
}
postImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = messageEdit.getText().toString();
if (TextUtils.isEmpty(message)) {
Toast.makeText(EditScreen.this, "请添加消息", Toast.LENGTH_SHORT).show();
return;
}
// 从SharedPreferences获取用户名
SharedPreferences sharedPreferences = EditScreen.this.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
String retrievedUserName = sharedPreferences.getString("UserNameKey", "DefaultUserName");
// 打开数据库管理器
DatabaseManager manager = new DatabaseManager(EditScreen.this);
manager.open();
// 根据是否是照片贴文,将消息和图片信息保存到数据库
if (isPhoto) {
manager.postMood(retrievedUserName, message, imageUrl);
} else {
String bitmapUrl = bitmapToBase64(bitmap);
manager.postMood(retrievedUserName, message, bitmapUrl);
}
// 关闭数据库管理器
manager.close();
finish();
}
});
}
// 将Bitmap转换为Base64编码的字符串
public String bitmapToBase64(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
}
}

@ -0,0 +1,122 @@
package com.example.sleep;
import java.io.Serializable;
import java.util.List;
import java.io.Serializable;
import java.util.List;
// 事件类
public class Event implements Serializable {
public String id; // 事件的唯一标识符
public String title; // 事件的标题
public String des; // 事件的描述
public String imageUrl; // 事件的图片URL
public List<EventContent> contents; // 包含事件内容的列表
// 事件类构造函数
public Event(String id, String title, String des, String imageUrl, List<EventContent> contents) {
this.id = id;
this.title = title;
this.des = des;
this.imageUrl = imageUrl;
this.contents = contents;
}
// 无参构造函数
public Event() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public List<EventContent> getContents() {
return contents;
}
public void setContents(List<EventContent> contents) {
this.contents = contents;
}
}
// 事件内容类
class EventContent implements Serializable {
public String contentId; // 内容的唯一标识符
public String userId; // 用户的唯一标识符,与事件内容关联
public String content; // 事件的具体内容
public String userName; // 用户的名字
// 事件内容类构造函数
public EventContent(String contentId, String userId, String content, String userName) {
this.contentId = contentId;
this.userId = userId;
this.content = content;
this.userName = userName;
}
// 无参构造函数
public EventContent() {
}
public String getContentId() {
return contentId;
}
public void setContentId(String contentId) {
this.contentId = contentId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}

@ -0,0 +1,22 @@
package com.example.sleep;
public class ItemModel {
private String imageUrl; // 用于存储图像URL或资源标识符
private String text; // 用于存储文本信息
// 构造函数,用于创建 ItemModel 对象并初始化其属性
public ItemModel(String imageUrl, String text) {
this.imageUrl = imageUrl;
this.text = text;
}
// 获取图像URL或资源标识符的方法
public String getImageResId() {
return imageUrl;
}
// 获取文本信息的方法
public String getText() {
return text;
}
}

@ -0,0 +1,82 @@
package com.example.sleep;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<ItemModel> dataList; // 数据列表
private Context context; // 上下文对象
public MyAdapter(Context context, List<ItemModel> dataList) {
this.context = context;
this.dataList = dataList;
}
public void setDataList(List<ItemModel> dataList) {
this.dataList = dataList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
ItemModel item = dataList.get(position);
holder.textView.setText("用户评论: " + item.getText());
// 尝试从文件中加载图片如果失败则从Base64字符串解码为Bitmap
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeFile(item.getImageResId());
} catch (Exception e) {
bitmap = base64ToBitmap(item.getImageResId());
}
if (bitmap == null) {
bitmap = base64ToBitmap(item.getImageResId());
}
holder.imageView.setImageBitmap(bitmap);
}
public Bitmap base64ToBitmap(String base64Encoded) {
byte[] decodedByte = Base64.decode(base64Encoded, 0);
return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
}
@Override
public int getItemCount() {
if (dataList == null) {
return 0;
}
return dataList.size();
}
static class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView;
MyViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
textView = itemView.findViewById(R.id.textView);
}
}
}

@ -0,0 +1,31 @@
package com.example.sleep;
import android.content.Context;
import android.content.SharedPreferences;
public class MySharedPreferences {
private static final String PREF_NAME = "MyAppPreferences"; // SharedPreferences 的名称
private static final String KEY_HOURS = "hours"; // 用于存储小时的键名
private static final String KEY_MINUTES = "minutes"; // 用于存储分钟的键名
// 保存小时和分钟到 SharedPreferences
public static void saveTime(Context context, int hours, int minutes) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); // 获取 SharedPreferences 对象
SharedPreferences.Editor editor = sharedPreferences.edit(); // 获取 SharedPreferences 编辑器
editor.putInt(KEY_HOURS, hours); // 存储小时数据
editor.putInt(KEY_MINUTES, minutes); // 存储分钟数据
editor.apply(); // 提交数据更改
}
// 从 SharedPreferences 中获取小时
public static int getHours(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); // 获取 SharedPreferences 对象
return sharedPreferences.getInt(KEY_HOURS, 0); // 获取存储的小时数据,默认值为 0表示如果没有存储的值则返回 0
}
// 从 SharedPreferences 中获取分钟
public static int getMinutes(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); // 获取 SharedPreferences 对象
return sharedPreferences.getInt(KEY_MINUTES, 0); // 获取存储的分钟数据,默认值为 0表示如果没有存储的值则返回 0
}
}

@ -0,0 +1,235 @@
package com.example.sleep;
import static android.app.Activity.RESULT_OK;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.design.widget.BottomSheetDialog;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.example.sleep.database.dao.DatabaseManager;
import java.io.File;
import java.util.List;
public class Share extends Fragment {
private static final int RESULT_LOAD_IMAGE = 111;
private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 222;
private ImageView eventPostImage;
private static final int MY_PERMISSIONS_REQUEST_CAMERA = 3;
private static final int REQUEST_IMAGE_CAPTURE = 1;
private Bitmap imageBitmap;
private RecyclerView eventRl;
private MyAdapter adapter;
private List<ItemModel> dataList;
// 在Fragment的onCreateView方法中初始化RecyclerView并设置适配器
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i("11111", "onCreateView");
View view = inflater.inflate(R.layout.event_content, container, false);
eventRl = view.findViewById(R.id.rl);
eventPostImage = view.findViewById(R.id.event_image);
eventPostImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 当点击事件被触发时,显示底部对话框
if (true) { // 在这里应该有条件检查
showDialog();
}
}
});
initData();
return view;
}
@Override
public void onResume() {
super.onResume();
Log.i("11111", "onResume");
SharedPreferences sharedPreferences = getActivity().getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
String retrievedUserName = sharedPreferences.getString("UserNameKey", "DefaultUserName");
loadData(retrievedUserName);
adapter.setDataList(dataList);
adapter.notifyDataSetChanged();
}
private void initData() {
eventRl.setLayoutManager(new LinearLayoutManager(getActivity()));
/*SharedPreferences sharedPreferences = getActivity().getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
String retrievedUserName = sharedPreferences.getString("UserNameKey", "DefaultUserName");
loadData(retrievedUserName); // 初始化数据*/
adapter = new MyAdapter(getActivity(), dataList);
eventRl.setAdapter(adapter);
}
private void loadData(String username) {
DatabaseManager manager = new DatabaseManager(getActivity());
manager.open();
dataList = manager.getUserNameEvent(username);
}
private void showDialog() {
// 显示底部对话框
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(getActivity());
View bottomSheetView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_bottom_sheet_dialog, null);
bottomSheetDialog.setContentView(bottomSheetView);
bottomSheetView.findViewById(R.id.btn_take_photo).setOnClickListener(v -> {
// 处理拍摄按钮点击事件
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// 请求相机权限
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
} else {
openCamera();
}
bottomSheetDialog.dismiss();
});
bottomSheetView.findViewById(R.id.btn_choose_from_gallery).setOnClickListener(v -> {
// 处理从相册中选择按钮点击事件
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// 请求读取外部存储权限
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
} else {
// 权限已经授予,进入图片选择流程
dispatchChoosePictureIntent();
}
bottomSheetDialog.dismiss();
});
bottomSheetView.findViewById(R.id.btn_cancel).setOnClickListener(v -> {
bottomSheetDialog.dismiss(); // 关闭对话框
});
bottomSheetDialog.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CAMERA: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了相机权限,可以拍照
openCamera();
} else {
// 用户拒绝了相机权限
}
}
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了读取外部存储权限
dispatchChoosePictureIntent();
} else {
// 用户拒绝了读取外部存储权限
}
}
}
}
private void dispatchChoosePictureIntent() {
if (true) {
// 从相册中选择图片
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RESULT_LOAD_IMAGE);
return;
}
// 创建拍照和选择图片的Intent
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent pickPictureIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, pickPictureIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "选择图片");
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
// 创建拍照所需的文件
File photoFile = null;
if (photoFile != null) {
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{takePictureIntent});
}
}
}
private void openCamera() {
// 打开相机应用拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
// 处理相机返回的数据
Bundle extras = data.getExtras();
imageBitmap = (Bitmap) extras.get("data");
// 启动新Activity并传递拍摄的图片
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmapImage", imageBitmap);
intent.putExtra("isPhoto", false);
intent.putExtras(bundle);
intent.setClass(getActivity(), EditScreen.class);
startActivity(intent);
} else if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImageUri = data.getData();
// 处理URI获取图片路径或者直接存储URI
// ...
// 如果你想获取图片的实际文件路径,可以如此操作
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(selectedImageUri, filePathColumn, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
// 将图片路径保存到数据库
// saveImagePathToDatabase(picturePath);
// 使用 imageBitmap ...
Intent intent = new Intent();
intent.putExtra("bitmapImageString", picturePath);
intent.putExtra("isPhoto", true);
intent.setClass(getActivity(), EditScreen.class);
startActivity(intent);
}
// 或者可以保存URI.toString()到数据库
// saveImageUriToDatabase(selectedImageUri.toString());
}
}
}
}

@ -0,0 +1,22 @@
package com.example.sleep.recyclerView;
/**
*
*/
public class Trace {
private String Date; // 记录的日期
private String Time; // 记录的时间
public Trace(String mDate, String mTime) {
this.Date = mDate;
this.Time = mTime;
}
public String getDate() {
return Date;
}
public String getTime() {
return Time;
}
}

@ -0,0 +1,119 @@
package com.example.sleep.recyclerView;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.sleep.R;
import com.example.sleep.SleepresultScreen;
import java.util.List;
public class TraceListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private LayoutInflater inflater;
private List<Trace> traceList;
private Context context;
private String date;
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mDate, mTime;
private TextView mTopLine;
private ImageView mDot;
ViewHolder(View itemView) {
super(itemView);
mDate = itemView.findViewById(R.id.Date);
mTime = itemView.findViewById(R.id.Time);
mTopLine = itemView.findViewById(R.id.TopLine);
mDot = itemView.findViewById(R.id.Dot);
}
void bindHolder(Trace trace) {
mDate.setText(trace.getDate());
mTime.setText(trace.getTime());
}
}
public TraceListAdapter(Context context, List<Trace> traceList, String date) {
// 构造函数,初始化适配器的数据
this.context = context;
inflater = LayoutInflater.from(context);
this.traceList = traceList;
this.date = date;
}
@Override
@NonNull
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 创建并返回记录项的 ViewHolder
return new ViewHolder(inflater.inflate(R.layout.list_cell, parent, false));
}
/**
*
*
* @param holder holder
* @param position
*/
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
ViewHolder itemHolder = (ViewHolder) holder;
if (position == 0) {
// 第一行头的竖线不显示
itemHolder.mTopLine.setVisibility(View.INVISIBLE);
itemHolder.mDot.setBackgroundResource(R.drawable.timeline);
} else if (position > 0) {
itemHolder.mTopLine.setVisibility(View.VISIBLE);
itemHolder.mDot.setBackgroundResource(R.drawable.timeline);
}
itemHolder.bindHolder(traceList.get(position));
final TextView tv1 = holder.itemView.findViewById(R.id.Date);
final TextView tv2 = holder.itemView.findViewById(R.id.Time);
tv1.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击日期文本的事件处理
Intent i = new Intent(context, SleepresultScreen.class);
i.putExtra("date", date);
i.putExtra("position", holder.getAdapterPosition());
context.startActivity(i);
}
}
);
tv2.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击时间文本的事件处理
Intent i = new Intent(context, SleepresultScreen.class);
i.putExtra("date", date);
i.putExtra("position", holder.getAdapterPosition());
context.startActivity(i);
}
}
);
}
@Override
public int getItemCount() {
return traceList.size();
}
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
// 设置 RecyclerView 点击事件的监听器
this.mOnItemClickListener = mOnItemClickListener;
}
}
Loading…
Cancel
Save