首页 文章 精选 留言 我的

精选列表

搜索[android studio],共10000篇文章
优秀的个人博客,低调大师

HanLP Android 示例

portable版 portable版零配置,仅提供中文分词、简繁拼音、同义词等功能。只需在build.gradle中加入依赖: dependencies { compile 'com.hankcs:hanlp:portable-1.6.8' } 自定义版 HanLP的全部功能(分词、简繁、拼音、文本分类、句法分析)都兼容安卓,具体配置方法如下: 1、下载hanlp.jar放入app/libs。 2、下载data.zip解压到app/src/main/assets ,按需删除不需要的文件以减小apk体积。 3、在程序启动时(通常是MainApplication或MainActivity的onCreate方法)执行初始化代码: private void initHanLP() { try { Os.setenv("HANLP_ROOT", "", true); } catch (ErrnoException e) { throw new RuntimeException(e); } final AssetManager assetManager = getAssets(); HanLP.Config.IOAdapter = new IIOAdapter() { @Override public InputStream open(String path) throws IOException { return assetManager.open(path); } @Override public OutputStream create(String path) throws IOException { throw new IllegalAccessError("不支持写入" + path + "!请在编译前将需要的数据放入app/src/main/assets/data"); } }; } 之后就可以像普通Java项目一样调用HanLP的全部功能了。

优秀的个人博客,低调大师

Android 使用Sqlite

如何使用 继承SQLiteOpenHelper,通过SQLiteOpenHelper可以方便的管理SQLiteDatabase public class MyDataBaseHelper extends SQLiteOpenHelper { public final static String CREATE_TABLE_SQL="create table dict (_id integer primary key autoincrement,word text,detail text)"; public MyDataBaseHelper(Context context, String name, int version) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { // 第一次使用数据库是自动建表 db.execSQL(CREATE_TABLE_SQL); } /** * 升级数据是调用 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 获取可写数据库:SQLiteDatabase database=databaseHelper.getWritableDatabase(); 获取可读数据库: SQLiteDatabase db=databaseHelper.getReadableDatabase(); 执行SQL语句 db.executeSQL(String sql); db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集 insert db.insert(String table, String nullColumnHack, ContentValues values); 第一个参数都是表示要操作的表名;insert中的第二个参数表示强行插入null值的数据列的列名,当values参数为空或不含任何key-value对时该参数有效;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;插入方法执行后会返回新添记录的行号,该行号是一个内部值,与主键id无关,发生错误返回-1; 通过SQL语句也可实现:比如:db.execSQL("insert into news_info values(null,?,?)",new String[]{title,content}) update db.update(String table, Contentvalues values, String whereClause, String whereArgs); table:表名 values: 想更新的数据 whereClause:满足whereClause子句的记录将会被更新 whereArgs: 用于为whereClause子句传入参数 例 int result=db.update("news_info",values,"_id>?",new Integer[]{20}); delete db.delete(String table, String whereClause, String whereArgs); table: 表名 whereClause:满足whereClause子句的记录将会被删除 whereArgs: 用于为whereClause子句传入参数 query db.rawQuery(String sql, String[] selectionArgs); db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderB 上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集;下面的几种参数都很类似,columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名,limit指定分页参数,distinct可以指定“true”或“false”表示要不要过滤重复值。需要注意的是,selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。 Cursor c.move(int offset); //以当前位置为参考,移动到指定行 c.moveToFirst(); //移动到第一行 c.moveToLast(); //移动到最后一行 c.moveToPosition(int position); //移动到指定行 c.moveToPrevious(); //移动到前一行 c.moveToNext(); //移动到下一行 c.isFirst(); //是否指向第一条 c.isLast(); //是否指向最后一条 c.isBeforeFirst(); //是否指向第一条之前 c.isAfterLast(); //是否指向最后一条之后 c.isNull(int columnIndex); //指定列是否为空(列基数为0) c.isClosed(); //游标是否已关闭 c.getCount(); //总数据项数 c.getPosition(); //返回当前游标所指向的行数 c.getColumnIndex(String columnName);//返回某列名对应的列索引值 c.getString(int columnIndex); //返回当前行指定列的值

优秀的个人博客,低调大师

Android图文上传

这次介绍下如何使用Retrofit+rxjava上传图片和文字 接口的写法 public interface MarketApiService { @Multipart//这里一定要加这个 @POST("market/addNewOrder") Observable<ResultBean> addNewOrder(@QueryMap Map<String, String> map, @Part MultipartBody.Part pic); } 上传的代码 Map<String, String> params = new HashMap<String, String>(); params.put("ship_type_id", type); params.put("cons_number", consNumber); params.put("note", beizhu); File fileByUri = FileUtil.getFileByUri(imagepath, this); //这里最好写成MediaType.parse("image/*"),之前写成MediaType.parse("image/png")上传失败 RequestBody photoRequestBody = RequestBody.create(MediaType.parse("image/*"), fileByUri); MultipartBody.Part photo = MultipartBody.Part.createFormData("file", fileByUri.getName(), photoRequestBody); RetrofitUtils.getInstance().getApiServier(MarketApiService.class) .addNewOrder(params,photo) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<ResultBean>() { @Override public void accept(ResultBean resultBean) throws Exception { } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { } }); 这里的图片选择器使用的是知乎的图片选择器https://github.com/zhihu/Matisse 另外这里还有将Uri转换为File的工具类(因为知乎图片选择器返回的是Uri) public static File getFileByUri(Uri uri, Context context) { String path = null; if ("file".equals(uri.getScheme())) { path = uri.getEncodedPath(); if (path != null) { path = Uri.decode(path); ContentResolver cr = context.getContentResolver(); StringBuffer buff = new StringBuffer(); buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")"); Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA }, buff.toString(), null, null); int index = 0; int dataIdx = 0; for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID); index = cur.getInt(index); dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA); path = cur.getString(dataIdx); } cur.close(); if (index == 0) { } else { Uri u = Uri.parse("content://media/external/images/media/" + index); System.out.println("temp uri is :" + u); } } if (path != null) { return new File(path); } } else if ("content".equals(uri.getScheme())) { // 4.2.2以后 String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null); if (cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); path = cursor.getString(columnIndex); } cursor.close(); return new File(path); } else { //Log.i(TAG, "Uri Scheme:" + uri.getScheme()); } return null; } 个人博客https://myml666.github.io/

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册