冲刺八
今天做了什么:今天实现了选择照片后的识别,其后端原理与我之前的拍照识别相似
package com.example.vastland;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ChooseActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 0;
private static final int OPEN_GALLERY_REQUEST_CODE = 1;
private ImageView iv;
Handler mainhandler;
ListView listView;
MyAdapter myAdapter;
List<ItemBean> mBeanList;
ImageView back;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose);
iv = findViewById(R.id.iv);
listView = findViewById(R.id.list);
back = findViewById(R.id.back);
mainhandler = new Handler();
//打开相册
applyPermission();
back.setOnClickListener(v -> {
Intent intent = new Intent(this,homeFragment.class);
startActivity(intent);
});
}
/**
* 申请动态权限
*/
private void applyPermission() {
//检测权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 如果没有权限,则申请需要的权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
} else {
// 已经申请了权限
openGallery();
}
}
/**
* 用户选择是否开启权限操作后的回调;TODO 同意/拒绝
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户同样授权
openGallery();
} else {
// 用户拒绝授权
Toast.makeText(this, "需要授予存储权限", Toast.LENGTH_SHORT).show();
Log.d("HL", "需要授予存储权限!");
Intent intent = new Intent(this,homeFragment.class);
startActivity(intent);
}
}
}
/**
* 打开相册
*/
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, OPEN_GALLERY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == OPEN_GALLERY_REQUEST_CODE) { // 检测请求码
if (resultCode == Activity.RESULT_OK && data != null) {
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(data.getData());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// TODO 把获取到的图片放到ImageView上
iv.setImageBitmap(bitmap);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 100表示压缩质量
byte[] byteArray = baos.toByteArray();
saveToHistory(data.getData().toString());
new Thread(new Runnable() {
@Override
public void run() {
altest altest=new altest();
MyObject a=altest.getdata1(byteArray);
mainhandler.post(new Runnable() {
@Override
public void run() {
initData(a);
}
});
}
}).start();
}
}
}
public void initData(MyObject a) {
if (a.getResult().get(0).getRoot().equals("feel this wave")) {
a.getResult().remove(0);
}
get(a.getResult());
mBeanList = new ArrayList<>();
String firstUser = null;
for (MyObject.ResultItem user : a.getResult()) {
ItemBean itemBean = new ItemBean();
itemBean.setTitle(user.getKeyword());
itemBean.setContent("概率" + user.getScore() + "点击了解详情");
itemBean.setImgsId(R.drawable.ani);
mBeanList.add(itemBean);
System.out.println(mBeanList.size());
if (firstUser == null) {
firstUser = user.getKeyword(); // 保存第一个user
}
}
if (firstUser != null) {
saveToHistorys(firstUser); // 只调用一次saveToHistorys()方法
}
myAdapter = new MyAdapter(ChooseActivity.this, mBeanList);
listView.setAdapter(myAdapter);
}
public void get(List<MyObject.ResultItem> a){
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent =new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://baike.baidu.com/item/"+a.get(position).getKeyword()));
startActivity(intent);
}
});
}
// 在选择图片并识别成功后调用该方法
private void saveToHistory(String imagePath) {
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_IMAGE_PATH, imagePath);
long rowId = db.insert(DatabaseHelper.TABLE_NAME, null, values);
if (rowId == -1) {
// 保存失败
} else {
// 保存成功
System.out.println("保存成功11111111111111111111111111111111111111111");
}
db.close();
}
private void saveToHistorys( String result) {
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_RESULT, result);
long rowId = db.insert(DatabaseHelper.TABLE_NAME, null, values);
if (rowId == -1) {
// 保存失败
} else {
// 保存成功
System.out.println("保存成功2222222222222222222222222222222222222222222");
}
db.close();
}
}
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ChooseActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 0;
private static final int OPEN_GALLERY_REQUEST_CODE = 1;
private ImageView iv;
Handler mainhandler;
ListView listView;
MyAdapter myAdapter;
List<ItemBean> mBeanList;
ImageView back;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose);
iv = findViewById(R.id.iv);
listView = findViewById(R.id.list);
back = findViewById(R.id.back);
mainhandler = new Handler();
//打开相册
applyPermission();
back.setOnClickListener(v -> {
Intent intent = new Intent(this,homeFragment.class);
startActivity(intent);
});
}
/**
* 申请动态权限
*/
private void applyPermission() {
//检测权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 如果没有权限,则申请需要的权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
} else {
// 已经申请了权限
openGallery();
}
}
/**
* 用户选择是否开启权限操作后的回调;TODO 同意/拒绝
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户同样授权
openGallery();
} else {
// 用户拒绝授权
Toast.makeText(this, "需要授予存储权限", Toast.LENGTH_SHORT).show();
Log.d("HL", "需要授予存储权限!");
Intent intent = new Intent(this,homeFragment.class);
startActivity(intent);
}
}
}
/**
* 打开相册
*/
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, OPEN_GALLERY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == OPEN_GALLERY_REQUEST_CODE) { // 检测请求码
if (resultCode == Activity.RESULT_OK && data != null) {
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(data.getData());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// TODO 把获取到的图片放到ImageView上
iv.setImageBitmap(bitmap);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 100表示压缩质量
byte[] byteArray = baos.toByteArray();
saveToHistory(data.getData().toString());
new Thread(new Runnable() {
@Override
public void run() {
altest altest=new altest();
MyObject a=altest.getdata1(byteArray);
mainhandler.post(new Runnable() {
@Override
public void run() {
initData(a);
}
});
}
}).start();
}
}
}
public void initData(MyObject a) {
if (a.getResult().get(0).getRoot().equals("feel this wave")) {
a.getResult().remove(0);
}
get(a.getResult());
mBeanList = new ArrayList<>();
String firstUser = null;
for (MyObject.ResultItem user : a.getResult()) {
ItemBean itemBean = new ItemBean();
itemBean.setTitle(user.getKeyword());
itemBean.setContent("概率" + user.getScore() + "点击了解详情");
itemBean.setImgsId(R.drawable.ani);
mBeanList.add(itemBean);
System.out.println(mBeanList.size());
if (firstUser == null) {
firstUser = user.getKeyword(); // 保存第一个user
}
}
if (firstUser != null) {
saveToHistorys(firstUser); // 只调用一次saveToHistorys()方法
}
myAdapter = new MyAdapter(ChooseActivity.this, mBeanList);
listView.setAdapter(myAdapter);
}
public void get(List<MyObject.ResultItem> a){
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent =new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://baike.baidu.com/item/"+a.get(position).getKeyword()));
startActivity(intent);
}
});
}
// 在选择图片并识别成功后调用该方法
private void saveToHistory(String imagePath) {
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_IMAGE_PATH, imagePath);
long rowId = db.insert(DatabaseHelper.TABLE_NAME, null, values);
if (rowId == -1) {
// 保存失败
} else {
// 保存成功
System.out.println("保存成功11111111111111111111111111111111111111111");
}
db.close();
}
private void saveToHistorys( String result) {
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_RESULT, result);
long rowId = db.insert(DatabaseHelper.TABLE_NAME, null, values);
if (rowId == -1) {
// 保存失败
} else {
// 保存成功
System.out.println("保存成功2222222222222222222222222222222222222222222");
}
db.close();
}
}

浙公网安备 33010602011771号