• 第二阶段(冲刺四)


    徐利峰:

    今天完成的任务是:实现将整个动态发表的信息上传至服务器。

    其中遇到的困难有:

    ①上传服务器中文乱码问题,解决方案为jdbc:mysql://localhost:3306/baixiaosheng?useUnicode=true&characterEncoding=UTF-8

    ②传输图片时的文本过长,导致传入的数据只有部分存储到数据库,改变imgurl的存储格式为text

    Android端代码:

    package com.lh.std_everything.ui.home.hometype.dongtai;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.navigation.Navigation;
    import androidx.recyclerview.widget.GridLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ProgressBar;
    import android.widget.Toast;
    
    import com.giftedcat.easylib.selector.MultiImageSelector;
    import com.lh.std_everything.HttpUtil.HttpUtil;
    import com.lh.std_everything.MainActivity;
    import com.lh.std_everything.R;
    import com.lh.std_everything.ui.home.HomeFragment;
    import com.lh.std_everything.ui.home.hometype.blog.WriteViewModel;
    import com.lh.std_everything.ui.home.hometype.news.shownews.ShowNewsActivity;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.Unbinder;
    
    public class DongTaiActivity extends AppCompatActivity implements View.OnClickListener{
        private static final int REQUEST_IMAGE = 2;
        private int maxNum = 9;
        private Button submit;
        private EditText text;
        Unbinder unbinder;
        ProgressBar progressBar;
        @BindView(R.id.rv_images)
        RecyclerView rvImages;
        private Handler handle;
        NineGridAdapter adapter;
        private int uploadnum=0;
        private int size;
        private String urlimg;
        private List<String> select;
        List<String> mSelect;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dong_tai);
            unbinder = ButterKnife.bind(this);
            submit=findViewById(R.id.submit);
            text=findViewById(R.id.text);
            progressBar=findViewById(R.id.progressBar);
            mSelect = new ArrayList<>();
            submit.setOnClickListener(this);
            initView();
        }
        private void initView() {
            rvImages.setLayoutManager(new GridLayoutManager(this, 3));
            adapter = new NineGridAdapter(DongTaiActivity.this, mSelect, rvImages);
            adapter.setMaxSize(maxNum);
            rvImages.setAdapter(adapter);
            adapter.setOnAddPicturesListener(new OnAddPicturesListener() {
                @Override
                public void onAdd() {
                    pickImage();
                }
            });
        }
    
        /*上传发动态的信息和照片到服务器
         */
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.submit:
                    final String daongtaitext=text.getText().toString();
                    if(daongtaitext.isEmpty()){
                        Toast.makeText(DongTaiActivity.this, "动态内容不能为空", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    String username= MainActivity.getUsername();
                    handle = new Handler(new Handler.Callback() {
                        @Override
                        public boolean handleMessage(@NonNull Message msg) {
                            switch (msg.what) {
                                case 100:
                                    if (uploadnum < size) {
                                        writeDongTaiImg(select.get(uploadnum));
                                    } else {
                                        Toast.makeText(DongTaiActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
                                        progressBar.setVisibility(View.GONE);
                                    }
                                    break;
                                case 404:
                                    Toast.makeText(DongTaiActivity.this, "上传失败,您可以点击上传按钮重新上传", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                    break;
                                default:
                                    break;
                            }
                            return true;
                        }
                    });
                    /*将动态写到服务器*/
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            String req="";
                            String context=text.getText().toString();
                            Log.i("输入的文本:", ""+context);
                            String url ="http://116.62.178.231:8080/BaiXiaoSheng/adddongtai?username="+MainActivity.getUsername()+"&text="+context;
                            Log.i("url:", ""+url);
                            String msg=String.valueOf(HttpUtil.sendPost(url,req));
                            Log.d("文字上传:",msg);
                        }
                    }).start();
    
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            DongTaiActivity.this.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    progressBar.setVisibility(View.VISIBLE);
                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                        progressBar.setTooltipText("正在上传...");
                                    }
                                }
                            });
                            /*将图片一张一张上传到服务器*/
                            String context=text.getText().toString();
                            urlimg = "http://116.62.178.231:8080/BaiXiaoSheng/downloadimg?username="+MainActivity.getUsername()+"&text="+context;
                            handle.sendEmptyMessage(100);
                        }
                    }).start();
            }
        }
        /*上传图片*/
        private void writeDongTaiImg(final String img) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.i("图片地址:", img);
                    Map<String, File> fileMap = new HashMap<String, File>();
                    fileMap.put("file", new File(img));
                    String msg = null;
                    try {
                        msg = HttpUtil.sendPostImg(urlimg, fileMap);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    uploadnum++;
                    Log.i("当前已上传照片数:", ""+uploadnum);
                    final String finalMsg = msg;
                    DongTaiActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.e("服务器返回信息:", ""+finalMsg);
                            if (finalMsg.equals("yes")) {
                                Log.d("tag", finalMsg);
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                    progressBar.setTooltipText("图片进度:" + uploadnum + "/" + size);
                                }
                                handle.sendEmptyMessage(100);
                            } else {
                                uploadnum = 0;
                                handle.sendEmptyMessage(404);
                            }
                        }
                    });
                }
            }).start();
        }
    
    
        /**
         * 选择添加图片
         */
        private void pickImage() {
            MultiImageSelector selector = MultiImageSelector.create(this);
            selector.showCamera(true);
            selector.count(maxNum);
            selector.multi();
            selector.origin(mSelect);
            selector.start(this, REQUEST_IMAGE);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == REQUEST_IMAGE) {
                if (resultCode == RESULT_OK) {
                    select = data.getStringArrayListExtra(MultiImageSelector.EXTRA_RESULT);
                    size=select.size()-1;
                    Log.i("照片总数:", ""+size);
                    mSelect.clear();
                    mSelect.addAll(select);
                    adapter.notifyDataSetChanged();
                }
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unbinder.unbind();
        }
    
    }
    View Code

    李浩:

    今日完成我的页面布局:

    效果图如下:

    明日任务:完成下面分支的交互事件。

  • 相关阅读:
    .Net项目模板(Project Template)
    撸码是需要直觉的
    一个简单的规则引擎例子
    CSRobot gen来了
    .Net项目模板进阶
    好用的验证框架FluentValidation(下)
    不一样的虚假(Bogus)和骗子(Faker)
    c#中的多义关键字
    CSRobot gen:mssqlc#类型映射
    CSRobot gen:mysql,pgc#类型映射
  • 原文地址:https://www.cnblogs.com/xlk3/p/12934415.html
Copyright © 2020-2023  润新知