我们这次project实现的是图片中的文字识别:首先客户端上传一张图片给云服务器,然后服务器进行OCR文字识别,再将识别的结果返回给客户端。下面就从云端部分和Android部分分析:
从云端分析:
从Android活动来分析代码
一、网络连接(ConnectToCloud.java)
这个类主要用来连接云端,发送指令,然后接收返回的结果,有可能是json格式的数据,也有可能是图片。还有一个功能是bitmap格式图片的处理:如果接收从云端返回的图片,就写入本地,也可以从本地读取图片,返回bitmap。
1 初始化连接
public void connect(final String url) {
try {
connection = (HttpURLConnection) ((new URL(url.toString()).openConnection()));
connection.setDoInput(true);
connection.setDoOutput(true);
//post请求用于提交数据给服务器,每条数据以键值对形式存在,数据与数据之间用&分开
connection.setRequestMethod("POST");
//connection.setConnectTimeout(8000);
//connection.setReadTimeout(8000);
} catch (Exception e) {
e.printStackTrace();
}
}
2 获取Json格式数据
public String getJson (final String json){
try{
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(json);
out.flush();
out.close();
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
}catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return "";
}
3 获取Bitmap格式图片
public Bitmap getImage(String string){
try{
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(string.getBytes());
Bitmap bitmap = BitmapFactory.decodeStream(connection.getInputStream());
return bitmap;
}catch (Exception e){
e.printStackTrace();
}
return Bitmap.createBitmap(null);
}
4 从输入流中读取图片,并写入本地
public void readAsFile(InputStream inSream, File file) throws Exception {
FileOutputStream outStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inSream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inSream.close();
Log.e(TAG, "头像写入本地成功!");
}
5 从本地读取图片,并转化为bitmap格式
public Bitmap getBitmap(String jpgName) {
try {
String url = Environment.getExternalStorageDirectory() + "/"+jpgName+".jpg";
FileInputStream fis = new FileInputStream(url);
return BitmapFactory.decodeStream(fis);
} catch (Exception e) {
Log.e(TAG, "获取图片Bitmap失败!");
return null;
}
}
二、登录(LoginActivity.java)
这里主要实现的功能是记住密码,通过sharedPreferences实现。需要注意的地方是,同一个应用中,通过getSharedPreferences得到的数据库其实是一样的,不用担心在不同的活动中获取的数据库不同的问题。
另外在刚打开应用的时候,如果本地保存了用户的头像,还应该加载它,代码如下:
private void setHead() {
sharedPreferences = getSharedPreferences("user", MODE_PRIVATE);
boolean isChecked = sharedPreferences.getBoolean("isChecked", false);
if (isChecked) {
try {
File file = new File(Environment.getExternalStorageDirectory(), "head.jpg");
if (file.exists()) {
FileInputStream fis = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
usrPortrait.setImageBitmap(bitmap);
}
}
catch (Exception e) {}
}
}
三、主活动(MainActivity.java)