List userList = null;
try {
conn = jdbcutils.getConn();
userList = runner.query(conn, sql, new BeanListHandler(ImageBean.class));
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcutils.tryClose(null, conn);
}
return userList;
}
public static ClassBean getCLass(String classid) {
String sql = “Select * From classinfo where id=” + classid;
QueryRunner runner = new QueryRunner();
Connection conn = null;
List userList = null;
try {
conn = jdbcutils.getConn();
userList = runner.query(conn, sql, new BeanListHandler(ClassBean.class));
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcutils.tryClose(null, conn);
}
ClassBean bean = null;
for (ClassBean item : userList) {
bean = item;
}
return bean;
}
public static void SaveWork(Map
// TODO Auto-generated method stub
Connection conn = null;
PreparedStatement pstmt = null;
String classid = String.valueOf(dataMap.get(“classid”));
String filename = String.valueOf(dataMap.get(“filename”));
String filepath = String.valueOf(dataMap.get(“filepath”));
StringBuffer insertSQL = new StringBuffer();
insertSQL.append(“Insert Into image(”);
insertSQL.append(“classid,filepath,imagename”);
insertSQL.append(") values(");
insertSQL.append("?,?,? ");
insertSQL.append(")");
try {
conn = jdbcutils.getConn();
pstmt = conn.prepareStatement(insertSQL.toString());
// 为SQL语句?进行赋值的操作。
pstmt.setString(1, classid);
pstmt.setString(2, filepath);
pstmt.setString(3, filename);
// 执行SQL语句。
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcutils.tryClose(pstmt, conn);
}
}
}
3,servlet代码(主要做数据的处理以及响应)
package servlet;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import android.Bean.ClassBean;
import android.Bean.ImageBean;
import utils.WebUtil;
import utils.jdbcutils;
/**
*/
public class ClassServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/**
@see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=UTF-8”);
String task = request.getParameter(“task”);
if (task.equals(“select”)) {
//挑选出类别
this.doSelect(request, response);
} else if (task.equals(“insert”)) {
//类别的增加操作
this.doAdd(request, response);
} else if (task.equals(“showImage”)) {
//页面跳转,用于客户端的webview
this.doshowImage(request,
response);
} else if (task.equals(“imageSelect”)) {
//获取图片的所有数据的操作
this.doselectimage(request, response);
} else if (task.equals(“insertDel”)) {
//文件的上传操作
this.insertDel(request, response);
}
}
private void doselectimage(HttpServletRequest request, HttpServletResponse response) throws IOException {
String classid = request.getParameter(“value”);
List list = ClassDao.getImage(classid);
for(ImageBean bean:list) {
System.out.println("***********************");
ServletContext context = this.getServletContext();
String uploadDir = context.getRealPath("/uploadfiles/")+bean.getFilepath();
bean.setData(jdbcutils.image2byte(uploadDir));
}
PrintWriter out = response.getWriter();
if(list.size()==0) {
WebUtil.printJson("", out);
}else {
WebUtil.printJson(list, out);
}
out.flush();
out.close();
}
private void doshowImage(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String classid = request.getParameter(“classid”);
ClassBean bean = ClassDao.getCLass(classid);
request.setAttribute(“bean”, bean);
request.getRequestDispatcher(“jsp/Work_edit.jsp”).forward(request, response);
}
private void doAdd(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
String str = request.getParameter(“value”);
Boolean flag = ClassDao.AddClass(str);
WebUtil.printJson(flag, out);
out.flush();
out.close();
}
private void doSelect(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
List list = ClassDao.getBigShopList();
WebUtil.printJson(list, out);
out.flush();
out.close();
}
protected void insertDel(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding(“UTF-8”);// 传值编码
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(factory);
Map
try {
List list = fileUpload.parseRequest(request);
for (DiskFileItem fileItem : list) {
boolean isFormField = fileItem.isFormField();
if (isFormField == true) {
// 表示是表单的普通元素
String field_Name = fileItem.getFieldName();
String field_Value = fileItem.getString(“UTF-8”);
dataMap.put(field_Name, field_Value);
} else {
// 表示是表单的上传元素
String filename = fileItem.getName();
if (filename != null && filename.equals("") == false) {
String filepath = WebUtil.getTimeStamp() + “_” + filename;
dataMap.put(“filename”, filename);
dataMap.put(“filepath”, filepath);
InputStream inputStream = fileItem.getInputStream();
ServletContext context = this.getServletContext();
String uploadDir = context.getRealPath("/uploadfiles");
// uploadfiles
String sss = uploadDir + “/” + filepath;
OutputStream outputStream = new FileOutputStream(uploadDir + “/” + filepath);
int i = 0;
byte[] byteArray = new byte[10240];
while ((i = inputStream.read(byteArray)) != -1) {
outputStream.write(byteArray, 0, i);
}
outputStream.flush();
// 关闭流
inputStream.close();
outputStream.close();
}
}
}
// 2:将数据写入到数据库中。
ClassDao.SaveWork(dataMap);
} catch (FileUploadException e) {
e.printStackTrace();
}
out.flush();
out.close();
}
}
二,构建客户端的代码,客户端主要是产生请求和对json数据进行解析
1,对于客户端,也需要两个class的类和imageclass的类,用来使用gson的数据进行数据转化
2,对于客户端,我并未选择把数据库的操作放在客户端,一方面来说,对于数据库的存储操作,在安卓的客户端会比较困难(是我太菜了),另一方方面,如果把数据库放在客户端,外面的人可对你的app进行反编译,获取你的数据库的连接的方式,安全性太低,所以,对于安卓的开发来说,一般的数据操作基本是放在服务端,安卓端所要做的所要做的只是对json数据或者sml数据进行分析。
3,对于mianactivity这个Java的使用,我采用的是使用多线程和handler的方式,我采用的利用子线程来获取数据,在通过message对数据进行包装,然后同通过handler的msg的发送机制,在handler里面对数据进行分析,值得一提的是,网络上的的大部分的数据的网络使用的是httpclient,并且没有使用线程,我i不知道是啥原因,反正我是运行不了的。(话不多说,大部分解读,我放在注释里面了)
数据的请求的代码:(只简单的示例一小部分)
public static String getJSONSelect(String task) throws Exception {
StringBuilder sb = new StringBuilder();
String path = “你自己的url”;
Log.i("***********==",path);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod(“GET”);
if (conn.getResponseCode() == 200) {
InputStream inStream = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + “\n”);
}
reader.close();
return sb.toString();
}
return null;
}
MainActivity的代码
package com.example.images;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
List
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = findViewById(R.id.listview);
list = new ArrayList
//对获取到的数据进行分析
final Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
//常规的适配器操作
ClassBean[] array = new Gson().fromJson(msg.obj.toString(), ClassBean[].class);
List Classlist = Arrays.asList(array);
for(ClassBean bean:Classlist){
Map
map.put(“name”,bean.getClassName());
map.put(“classid”,bean.getID());
list.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, list, R.layout.cell,
new String[]{“name”,“classid”}, new int[]{R.id.text1,R.id.classid});
listView.setAdapter(simpleAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Map
// Toast.makeText(MainActivity.this, String.valueOf(map.get(“classid”)), Toast.LENGTH_SHORT).show();
Intent intent=new Intent(MainActivity.this,ImageActivity.class);
Bundle bundle=new Bundle();
bundle.putCharSequence(“classid”,String.valueOf(map.get(“classid”)));
intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
};
//对类别进行添加,简单的activity操作
Button button=findViewById(R.id.buttonAdd);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,AddActivity.class);
startActivity(intent);
}
});
//在这里使用子线程来对数据进行获取,采用用msg将数据转发到主线陈
new Thread(new Runnable(){
@Override
public void run() {
String str="";
try {
str=Utils.getJSONSelect(“select”);
Log.i("**********************",str);
} catch (Exception e) {
e.printStackTrace();
}
Message msg=new Message();
msg.what=1;
msg.obj=str;
handler.sendMessage(msg);
}
}).start();
}
}
程序运行的结果:
4,imageactivity的操作,这里的数据转化值得一说,设计到两个数据类型的转化,原本我是想通过获取到的数据来进行对图片的二次获取,但是,在写完以后,我发现,对于这种代码,太过复杂,所以,我采用了把数据放在byte数组里面,然后对数据进行分析,将byte数组里面的数据转化为bitmap数据,然后对数据进行转化,把bitmap数据在适配器里面对数据转化为可显示的数据。
package com.example.images;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ImageActivity extends AppCompatActivity {
String Url = “”;
List
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imagemain);
Log.i("*********************", “进入查看图像”);
final Intent intent = getIntent();
final Bundle bundle = intent.getExtras();
final ListView listView = findViewById(R.id.listview2);
final String classid = bundle.getString(“classid”);
Log.i("***********===", classid);
//常规的数据处理
final Handler handler = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
list=new ArrayList
if (msg.what == 6) {
ImageBean[] array = new Gson().fromJson(msg.obj.toString(), ImageBean[].class);
List Classlist = Arrays.asList(array);
for(ImageBean bean:Classlist){
Map
//byte数组转化为bitmap数据
Bitmap bitmap = BitmapFactory.decodeByteArray( bean.getData(), 0, bean.getData().length);
map.put(“name”,“名称:”+bean.getImagename()+"\n"+“地点:无”+"\n"+“描述:无”);
map.put(“image”,bitmap);
list.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(ImageActivity.this, list, R.layout.imagecell,
new String[]{“image”,“name”}, new int[]{R.id.image123465,R.id.text123465});
//使用setviewBinder的对数据进行转化成可显示的图片
simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Object data,
String textRepresentation) {
if( (view instanceof ImageView) & (data instanceof Bitmap) ) {
ImageView iv = (ImageView) view;
Bitmap bm = (Bitmap) data;
iv.setImageBitmap(bm);
return true;
}
return false;
}
});
listView.setAdapter(simpleAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Map
Toast.makeText(ImageActivity.this, String.valueOf(map.get(“name”)), Toast.LENGTH_SHORT).show();
}
});
}else {
Toast.makeText(ImageActivity.this, “此类没有图片”, Toast.LENGTH_SHORT).show();
}
}
};
Button button = findViewById(R.id.buttonImage);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("*****************", “进入图片添加”);
Intent intent1 = new Intent(ImageActivity.this, ImageAddActivity.class);
intent1.putExtras(bundle);
startActivity(intent1);
}
});
//依旧采用子线程对数据进行获取和分析
new Thread(new Runnable() {
@Override
public void run() {
String str = “”;
Log.i("***********===2", “进入获取数据”);
try {
str = Utils.getJSONSelect(“imageSelect&value=” + classid);
Log.i(“*=====**”, classid);
} catch (Exception e) {
e.printStackTrace();
}
//获取到的数据必定大于10
Message msg = new Message();
if(str.length()>10){
msg.what = 6;
msg.obj = str;
}else{
msg.what = 0000;
}
Log.i(“*=====**”, String.valueOf(str.length()));
handler.sendMessage(msg);
}
}).start();
}
}
运行截图:
5,对MainActivity的里面的添加的类的addactivity
程序代码:
**", “进入图片添加”);
Intent intent1 = new Intent(ImageActivity.this, ImageAddActivity.class);
intent1.putExtras(bundle);
startActivity(intent1);
}
});
//依旧采用子线程对数据进行获取和分析
new Thread(new Runnable() {
@Override
public void run() {
String str = “”;
Log.i("***********===2", “进入获取数据”);
try {
str = Utils.getJSONSelect(“imageSelect&value=” + classid);
Log.i(“*=====**”, classid);
} catch (Exception e) {
e.printStackTrace();
}
//获取到的数据必定大于10
Message msg = new Message();
if(str.length()>10){
msg.what = 6;
msg.obj = str;
}else{
msg.what = 0000;
}
Log.i(“*=====**”, String.valueOf(str.length()));
handler.sendMessage(msg);
}
}).start();
}
}
运行截图:
5,对MainActivity的里面的添加的类的addactivity
程序代码: