3.6

3月6日(星期三)
• 所花时间:2
• 代码行数:273
• 博客容量:1
• 代码如下:

package pages;

import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.hui.testend.R;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

import entity.MyDataBase;
import entity.Post;
import entity.PostDao;
import entity.User;
import entity.UserDao;
import utils.MyApplication;
import utils.PostAdapter1;
import utils.Utils;

public class PostContent extends AppCompatActivity {

    private static final int CHOOSE_PICTURE = 0;
    private static final int TAKE_PICTURE = 1;
    private Uri tempUri;
    private ImageView imgPostImage;
    private ImageView imgReplyImage; // Ensure this is initialized
    private byte[] replyImageBytes;
    private PostDao postDao;
    private Post mainPost;
    private List<Post> replies;
    private ListView lvReplies;
    private PostAdapter1 postAdapter;
    private EditText edReplyContent;
    private int postId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post_posts);

        postDao = MyDataBase.getDB(this).getPostDao();
        lvReplies = findViewById(R.id.lv_replies);
        edReplyContent = findViewById(R.id.ed_reply_content);

        TextView tvUsername = findViewById(R.id.tv_username);
        TextView tvPostTitle = findViewById(R.id.tv_post_title);
        TextView tvPostContent = findViewById(R.id.tv_post_content);
        imgPostImage = findViewById(R.id.img_post_image);
        imgReplyImage = findViewById(R.id.img_reply_image); // Initialize here
        Button btnUploadReplyImage = findViewById(R.id.btn_upload_reply_image);
        Button btnSubmitReply = findViewById(R.id.btn_submit_reply);

        // 获取传递过来的帖子 ID
        postId = getIntent().getIntExtra("postId", -1);
        mainPost = postDao.queryTheme().stream().filter(post -> post.getPostId() == postId).findFirst().orElse(null);
        int userID = mainPost.getUserId();
        UserDao userDao = MyDataBase.getDB(this).getUserDao();
        User user = userDao.queryById(userID);
        if (mainPost != null) {
            tvUsername.setText(user.getUsername());
            tvPostTitle.setText(mainPost.getTitle());
            tvPostContent.setText(mainPost.getContent());
            if (mainPost.getImage() != null) {
                Bitmap bitmap = BitmapFactory.decodeByteArray(mainPost.getImage(), 0, mainPost.getImage().length);
                imgPostImage.setImageBitmap(bitmap);
                imgPostImage.setVisibility(View.VISIBLE);
            } else {
                imgPostImage.setVisibility(View.GONE);
            }
        }

        // 查询所有回复帖
        replies = postDao.queryRemark(postId);
        postAdapter = new PostAdapter1(this, replies);
        lvReplies.setAdapter(postAdapter);

        btnUploadReplyImage.setOnClickListener(v -> showChoosePicDialog());

        btnSubmitReply.setOnClickListener(v -> handleSubmitReply());
    }

    private void showChoosePicDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("上传图片");
        String[] items = {"选择本地照片", "拍照"};
        builder.setNegativeButton("取消", null);
        builder.setItems(items, (dialog, which) -> {
            switch (which) {
                case CHOOSE_PICTURE:
                    Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);
                    openAlbumIntent.setType("image/*");
                    startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
                    break;
                case TAKE_PICTURE:
                    Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    tempUri = Uri.fromFile(new File(getExternalFilesDir(null), "image.jpg"));
                    openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
                    startActivityForResult(openCameraIntent, TAKE_PICTURE);
                    break;
            }
        });
        builder.create().show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case TAKE_PICTURE:
                    setImageToView(tempUri);
                    break;
                case CHOOSE_PICTURE:
                    setImageToView(data.getData());
                    break;
            }
        }
    }

    private void setImageToView(Uri uri) {
        try {
            InputStream inputStream = getContentResolver().openInputStream(uri);
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            imgReplyImage.setImageBitmap(bitmap);
            imgReplyImage.setVisibility(View.VISIBLE);
            replyImageBytes = Utils.bitmapToBytes(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Toast.makeText(this, "图片处理失败", Toast.LENGTH_SHORT).show();
        }
    }

    private void handleSubmitReply() {
        String replyContent = edReplyContent.getText().toString().trim();

        if (TextUtils.isEmpty(replyContent)) {
            Toast.makeText(this, "请输入回复内容", Toast.LENGTH_SHORT).show();
            return;
        }

        Post replyPost = new Post();
        replyPost.setUserId(MyApplication.user.getUserId());
        replyPost.setContent(replyContent);
        replyPost.setImage(replyImageBytes);
        replyPost.setRelatedPostId(mainPost.getPostId());

        postDao.insert(replyPost);
        Toast.makeText(this, "回复成功", Toast.LENGTH_SHORT).show();

        // 刷新回复列表
        replies.add(replyPost);
        postAdapter.notifyDataSetChanged();
        edReplyContent.setText("");
        imgReplyImage.setImageBitmap(null);
        imgReplyImage.setVisibility(View.GONE);
        replyImageBytes = null;
    }
}

posted @ 2024-03-06 19:13  aallofitisst  阅读(12)  评论(0)    收藏  举报