柚子快报邀请码778899分享:冲刺十八天(动态的发布与展示)
动态的发布与展示
动态的展示:
DongTaiActivity(上传动态文字及照片)
package com.lh.std_everything.ui.home.hometype.dongtai;
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 androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
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 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
List
@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
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
TrendsFragment(动态展示页面)
package com.lh.std_everything.ui.friends.type.trends;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.lh.std_everything.HttpUtil.HttpUtil;
import com.lh.std_everything.R;
import com.lh.std_everything.ui.home.hometype.news.adapter.NewsAdapter;
import org.json.JSONArray;
import org.json.JSONException;
public class TrendsFragment extends Fragment {
private TrendsViewModel mViewModel;
private View view;
private RecyclerView recyclerView;
private TrendsAdapter trendsAdapter;
private Handler handler;
private SwipeRefreshLayout swipeRefreshLayout;
public static TrendsFragment newInstance() {
return new TrendsFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
view=inflater.inflate(R.layout.trends_fragment, container, false);
recyclerView=view.findViewById(R.id.rec_dongtai);
swipeRefreshLayout=view.findViewById(R.id.swiperefresh);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(TrendsViewModel.class);
// TODO: Use the ViewModel
recyclerView.setLayoutManager(new LinearLayoutManager(requireActivity()));
trendsAdapter = new TrendsAdapter();
recyclerView.setAdapter(trendsAdapter);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getThreadData();
Toast.makeText(view.getContext(),"刷新成功",Toast.LENGTH_LONG).show();
}
});
mViewModel.getJsonArrayMutableLiveDate().observe(requireActivity(), new Observer
@Override
public void onChanged(JSONArray jsonArray) {
if(swipeRefreshLayout.isRefreshing())
swipeRefreshLayout.setRefreshing(false);
trendsAdapter.setJsonArray(jsonArray);
trendsAdapter.notifyDataSetChanged();
}
});
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) { //线程回调更新数据
if (msg.what == 200)
mViewModel.getJsonArrayMutableLiveDate().setValue((JSONArray) msg.obj);
return true;
}
});
if (mViewModel.getJsonArrayMutableLiveDate().getValue() == null) { //初始加载数据
getThreadData();
} else {
trendsAdapter.setJsonArray(mViewModel.getJsonArrayMutableLiveDate().getValue());
trendsAdapter.notifyDataSetChanged();
}
}
private void getThreadData() { //线程封装网络请求
new Thread(new Runnable() {
@Override
public void run() {
String address = "http://116.62.178.231:8080/BaiXiaoSheng/findalldongtai";
try {
final JSONArray json = new JSONArray(String.valueOf(HttpUtil.sendPost(address, "")));
Log.d("tag", json.toString());
Message msg = new Message();
msg.what = 200;
msg.obj = json;
handler.sendMessage(msg);
} catch (JSONException e) {
e.printStackTrace();
}
}
}).start();
}
}
View Code
TrendsAdapter(动态适配器)
package com.lh.std_everything.ui.friends.type.trends;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.lh.std_everything.R;
import com.lh.std_everything.ui.home.hometype.news.adapter.NewsAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class TrendsAdapter extends RecyclerView.Adapter
JSONArray jsonArray=new JSONArray();
private View itemview;
public void setJsonArray(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
itemview=layoutInflater.inflate(R.layout.dongtai_item,parent,false);
return new TrendsAdapter.MyViewHolder(itemview);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
JSONObject bean= null;
try {
bean = jsonArray.getJSONObject(position);
holder.tv_name.setText(bean.getString("username"));
holder.tv_content.setText(bean.getString("content"));
holder.tv_time.setText(bean.getString("dtime"));
String []urls=bean.getString("imgurl").split(",");
String userimg=bean.getString("userimg");
RequestOptions options = new RequestOptions()
.error(R.drawable.error)
.placeholder(R.drawable.loading);
Glide.with(itemview)
.load(userimg)
.apply(options)
.circleCrop()
.into(holder.img_user);
holder.lin_imgs.removeAllViews();
if(urls.length!=0) {
for(int i=0;i { if(!urls[i].equals("")) { ImageView item=new ImageView(itemview.getContext()); Log.i("url",urls[i]); Glide.with(itemview) .load(urls[i]) .apply(options) .into(item); Log.i("图片分割链接:", ""+urls[i]); holder.lin_imgs.addView(item); } } } } catch (JSONException e) { e.printStackTrace(); } } @Override public int getItemCount() { return jsonArray.length(); } static class MyViewHolder extends RecyclerView.ViewHolder{ TextView tv_name,tv_time,tv_content; LinearLayout lin_imgs; ImageView img_user; public MyViewHolder(@NonNull View itemView) { super(itemView); img_user=itemView.findViewById(R.id.img_user); tv_name=itemView.findViewById(R.id.tv_name); tv_content=itemView.findViewById(R.id.tv_content); tv_time=itemView.findViewById(R.id.tv_time); lin_imgs=itemView.findViewById(R.id.lin_imgs); } } } View Code 服务器端: dongtaidao(服务器存储一条动态信息,查找所有动态信息) package Dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import Bean.Dongtai; import Bean.News; import Bean.User; import util.DBUtil; public class dongtaidao { public boolean adddongtai(String username,String text,String userimg,String dtime) { Connection con=null; PreparedStatement pstmt=null; ResultSet rs=null; try { con=DBUtil.getConn(); String sql="insert into dongtai(username,content,imgurl,userimg,dtime) values(?,?,?,?,?)"; pstmt=con.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, text); pstmt.setString(3, ""); pstmt.setString(4, userimg); pstmt.setString(5, dtime); pstmt.executeUpdate(); return true; } catch (SQLException e) { System.out.println("录入失败"); e.printStackTrace(); } finally { DBUtil.close(rs, pstmt, con); } return false; } public String findcurrenurl(String username,String text) { String sql="select * from dongtai where username='"+username+"'and content='"+text+"'"; Connection con=null; Statement state=null; ResultSet rs=null; con=DBUtil.getConn(); String urlString=""; try { state=con.createStatement(); rs=state.executeQuery(sql); while(rs.next()) { urlString=rs.getString("imgurl"); return urlString; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } DBUtil.close(rs, state, con); return ""; } public boolean updateurls(String username,String text,String currenturl) { Connection con=null; PreparedStatement pstmt=null; ResultSet rs=null; try { con=DBUtil.getConn(); String sql="update dongtai set imgurl=? where content=?"; pstmt=con.prepareStatement(sql); pstmt.setString(1, currenturl); pstmt.setString(2, text); pstmt.executeUpdate(); return true; } catch (SQLException e) { System.out.println("更新失败"); e.printStackTrace(); } finally { DBUtil.close(rs, pstmt, con); } return false; } public ArrayList { ArrayList String sql="select * from dongtai order by dtime desc"; Connection con=null; Statement state=null; ResultSet rs=null; con=DBUtil.getConn(); Dongtai bean=null; try { state=con.createStatement(); rs=state.executeQuery(sql); while(rs.next()) { String username=rs.getString("username"); String content=rs.getString("content"); String imgurl=rs.getString("imgurl"); String userimg=rs.getString("userimg"); String dtime=rs.getString("dtime"); bean=new Dongtai(username, content, imgurl,userimg,dtime); list.add(bean); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } DBUtil.close(rs, state, con); return list; } } View Code 图片展示: 柚子快报邀请码778899分享:冲刺十八天(动态的发布与展示) 文章链接
发表评论