在 C# 中将 Task<T> 转换为 Task<object>,无需 T
我有一个充满扩展方法的静态类,其中每个方法都是异步的并返回一些值 - 像这样: 公共静态类 MyContextExtensions{ 公共静态异步任务 我有一个充满扩展方法的静态类,其中每个方法都是异步的并返回一些值 - 像这样: public static class MyContextExtensions{ public static async Task<bool> SomeFunction(this DbContext myContext){ bool output = false; //...doing stuff with myContext return output; } public static async Task<List<string>> SomeOtherFunction(this DbContext myContext){ List<string> output = new List<string>(); //...doing stuff with myContext return output; } } 我的目标是能够从另一个类中的单个方法调用这些方法中的任何一个,并将其结果作为对象返回。它看起来像这样: public class MyHub: Hub{ public async Task<object> InvokeContextExtension(string methodName){ using(var context = new DbContext()){ //This fails because of invalid cast return await (Task<object>)typeof(MyContextExtensions).GetMethod(methodName).Invoke(null, context); } } } 问题是转换失败。我的困境是我无法将任何类型参数传递给“InvokeContextExtension”方法,因为它是 SignalR 中心的一部分并且由 javascript 调用。在某种程度上,我不关心扩展方法的返回类型,因为它只会序列化为 JSON 并发送回 javascript 客户端。但是,我确实必须将 Invoke 返回的值转换为任务才能使用等待运算符。我必须为该“任务”提供一个通用参数,否则它将把返回类型视为 void。因此,这一切都归结为如何成功地将具有通用参数 T 的任务转换为具有对象通用参数的任务,其中 T 表示扩展方法的输出。 您可以分两步完成 - await使用基类执行任务,然后使用反射或dynamic收获结果: using(var context = new DbContext()) { // Get the task Task task = (Task)typeof(MyContextExtensions).GetMethod(methodName).Invoke(null, context); // Make sure it runs to completion await task.ConfigureAwait(false); // Harvest the result return (object)((dynamic)task).Result; } 这是一个完整的运行示例,它将上述通过反射调用 Task 的技术置于上下文中: class MainClass { public static void Main(string[] args) { var t1 = Task.Run(async () => Console.WriteLine(await Bar("Foo1"))); var t2 = Task.Run(async () => Console.WriteLine(await Bar("Foo2"))); Task.WaitAll(t1, t2); } public static async Task<object> Bar(string name) { Task t = (Task)typeof(MainClass).GetMethod(name).Invoke(null, new object[] { "bar" }); await t.ConfigureAwait(false); return (object)((dynamic)t).Result; } public static Task<string> Foo1(string s) { return Task.FromResult("hello"); } public static Task<bool> Foo2(string s) { return Task.FromResult(true); } } 一般来说,要将 Task<T> 转换为 Task<object>,我会简单地采用简单的连续映射: Task<T> yourTaskT; // .... Task<object> yourTaskObject = yourTaskT.ContinueWith(t => (object) t.Result); (文档链接在这里) 但是,您实际的具体需求是 通过反射调用 Task 并获取其(未知类型)结果 。 为此,您可以参考完整的dasblinkenlight的答案,它应该适合您的具体问题。 我想提供一个实现,恕我直言,这是早期答案的最佳组合: 精确的参数处理 无动态调度 通用扩展方法 给你: /// <summary> /// Casts a <see cref="Task"/> to a <see cref="Task{TResult}"/>. /// This method will throw an <see cref="InvalidCastException"/> if the specified task /// returns a value which is not identity-convertible to <typeparamref name="T"/>. /// </summary> public static async Task<T> Cast<T>(this Task task) { if (task == null) throw new ArgumentNullException(nameof(task)); if (!task.GetType().IsGenericType || task.GetType().GetGenericTypeDefinition() != typeof(Task<>)) throw new ArgumentException("An argument of type 'System.Threading.Tasks.Task`1' was expected"); await task.ConfigureAwait(false); object result = task.GetType().GetProperty(nameof(Task<object>.Result)).GetValue(task); return (T)result; } 您不能将 Task<T> 转换为 Task<object>,因为 Task<T> 不是协变的(也不是逆变的)。最简单的解决方案是使用更多反射: var task = (Task) mi.Invoke (obj, null) ; var result = task.GetType ().GetProperty ("Result").GetValue (task) ; 这很慢且效率低下,但如果不经常执行此代码则可用。顺便说一句,如果您要阻塞等待其结果,那么异步 MakeMyClass1 方法有什么用呢? 另一种可能性是为此目的编写一个扩展方法: public static Task<object> Convert<T>(this Task<T> task) { TaskCompletionSource<object> res = new TaskCompletionSource<object>(); return task.ContinueWith(t => { if (t.IsCanceled) { res.TrySetCanceled(); } else if (t.IsFaulted) { res.TrySetException(t.Exception); } else { res.TrySetResult(t.Result); } return res.Task; } , TaskContinuationOptions.ExecuteSynchronously).Unwrap(); } 它是非阻塞解决方案,将保留任务的原始状态/异常。 最有效的方法是自定义等待者: struct TaskCast<TSource, TDestination> where TSource : TDestination { readonly Task<TSource> task; public TaskCast(Task<TSource> task) { this.task = task; } public Awaiter GetAwaiter() => new Awaiter(task); public struct Awaiter : System.Runtime.CompilerServices.INotifyCompletion { System.Runtime.CompilerServices.TaskAwaiter<TSource> awaiter; public Awaiter(Task<TSource> task) { awaiter = task.GetAwaiter(); } public bool IsCompleted => awaiter.IsCompleted; public TDestination GetResult() => awaiter.GetResult(); public void OnCompleted(Action continuation) => awaiter.OnCompleted(continuation); } } 具有以下用法: Task<...> someTask = ...; await TaskCast<..., object>(someTask); 这种方法的局限性在于结果不是 Task<object> 而是一个可等待的对象。 我根据dasblinkenlight的回答做了一个小小的扩展方法: public static class TaskExtension { public async static Task<T> Cast<T>(this Task task) { if (!task.GetType().IsGenericType) throw new InvalidOperationException(); await task.ConfigureAwait(false); // Harvest the result. Ugly but works return (T)((dynamic)task).Result; } } 用途: Task<Foo> task = ... Task<object> = task.Cast<object>(); 这样您就可以将 T 中的 Task<T> 更改为您想要的任何内容。 对于最佳方法,不使用反射和动态丑陋语法,也不传递泛型类型。我将使用两种扩展方法来实现这个目标。 public static async Task<object> CastToObject<T>([NotNull] this Task<T> task) { return await task.ConfigureAwait(false); } public static async Task<TResult> Cast<TResult>([NotNull] this Task<object> task) { return (TResult) await task.ConfigureAwait(false); } 用途: Task<T1> task ... Task<T2> task2 = task.CastToObject().Cast<T2>(); 这是我的第二种方法,但不推荐: public static async Task<TResult> Cast<TSource, TResult>([NotNull] this Task<TSource> task, TResult dummy = default) { return (TResult)(object) await task.ConfigureAwait(false); } 用途: Task<T1> task ... Task<T2> task2 = task.Cast((T2) default); // Or Task<T2> task2 = task.Cast<T1, T2>(); 这是我的第三种方法,但是不推荐:(类似于第二种) public static async Task<TResult> Cast<TSource, TResult>([NotNull] this Task<TSource> task, Type<TResult> type = null) { return (TResult)(object) await task.ConfigureAwait(false); } // Dummy type class public class Type<T> { } public static class TypeExtension { public static Type<T> ToGeneric<T>(this T source) { return new Type<T>(); } } 用途: Task<T1> task ... Task<T2> task2 = task.Cast(typeof(T2).ToGeneric()); // Or Task<T2> task2 = task.Cast<T1, T2>(); 将 await 与动态/反射调用混合使用并不是一个好主意,因为 await 是一条编译器指令,它会围绕调用的方法生成大量代码,并且使用更多反射来“模拟”编译器工作并没有真正的意义,延续、包装等 因为您需要的是在运行时管理代码,然后忘记在编译时工作的 asyc await 语法糖。重写 SomeFunction 和 SomeOtherFunction 而不使用它们,并在运行时创建的您自己的任务中开始操作。您将得到相同的行为,但代码非常清晰。
在我的项目中,gradle 显示了依赖关系: com.google.guava:番石榴:19.0 -> 20.0-rc1 com.google.guava:guava-jdk5:17.0 Afaik gradle 选择最新版本的同名依赖项,这...
与强制 gradle 生成 apk 类似,我想强制 Gradle 生成 apk,以防先前的构建已被移动或删除。我很好奇是否可以在构建目录时执行...
我正在尝试使用 gradle 实现声纳,以测量我的项目的代码覆盖率。 我们正在使用 gradle-4.0.1 和 sonarqube-6.4 。 当我从命令行运行 gradle sonarqube 时,出现此错误-
我在 android studio 中查看了 git 存储库,但遇到了 Gradle 同步失败错误。 当项目想要构建时,android studio 会抛出如下错误: Gradle 同步法...
Codenameone:使用 gradle 8 时,必须将 JAVA17_HOME 环境变量设置为 Java 17 JDK 的位置
自从在 NetBeans 12.6 上升级到 codenameone-maven-plugin:7.0.150 以来,我一直无法构建 codenameone Android Gradle 项目。 收到以下错误消息: 生成 android gradle
我想将我的密钥库保存在项目目录之外。我不想在存储库中存储文件路径,因此我将值委托给 ~/.gradle/gradle.prop 中适当的 gradle 变量...
我处于必须手动生成新线程的情况,因此我能够调用.SetApartmentState(ApartmentState.STA)。这意味着(据我所知)我无法使用 Task.但我会...
如何将 testOptions.unitTests.all 转换为 gradle Kotlin dsl
如何在 Gradle 中将这段代码从 Groovy 转换为 Kotlin DSL? testOptions.unitTests.all { 测试记录{ 异常格式=“完整” 事件“通过”,&...
为什么 Apache IoTDB 在插入时间戳时报告 `WrappedthreadPoolExecutor` 错误?
这个错误的原因是什么?错误 o.a,i.c.c,t。 WrappedthreadPoolExecutor:111 - 线程池 org.apache 中出现异常。 iotdb.threadpool:type=Compaction-Sub-Task,然后它报告我去...
我正在尝试调试在 docker 中运行的 gradle 应用程序,但是当我尝试在端口 5005 上连接调试器时,出现以下错误: 演示 % jdb -attach localhost:5005 ...
我正在尝试使用 Android Studio (gradle 8) 和公共 github 库:AndroidUSBCamera 创建一个 Android 应用程序。 我不认为我面临与库相关的问题,而是依赖/gradle/android
Gradle生成的启动脚本运行时找不到主类: ./应用程序名称.bat 错误:无法找到或加载主类 packageName.NameOfMainClass 我的 build.gradle 文件看起来
React Native Reanimated 错误:任务 ':Task :react-native-reanimated:prepareBoost FAILED' 执行失败
我尝试在 Android 模拟器上运行应用程序,但遇到了阻止程序。该问题似乎源于此软件包,导致应用程序无法运行。 这是正在寻找的包的版本...
自从我开始将项目从 java 转换为 kotlin 以来,我一直在 Mac 上遇到构建性能问题。 我将 gradle 与 Android Studio 3.0.1 一起使用 问题是当我构建/运行/
我需要清理 tokio::task::JoinSet 中已完成的任务吗?
注意:我也在 reddit 和 Rust 论坛中发布了这个问题。 嗨,我正在编写一个 TUI 可执行文件,我在 crossterm::event::EventStream 上使用 tokio::select 来实现非阻塞循环来接收用户密钥...
使用 Karate Runner 和 Gradle Kotlin 调试空手道
由于 Gradle 默认其构建文件使用 Kotlin,而且我从来都不是 Groovy 的粉丝,因此尝试使用开源 Karate Runner (v1.2.5) 进行调试。我已经尝试了几个版本...
在 Gradle Bar 中找不到 SHA-1 指纹密钥的签名报告:Android Studio Hedgehog
这是我在Android Studio中的GradleBar(版本:hedgehog) 我想从 Android Studio for Firebase 获取 SHA-1 密钥指纹。 我想要在我的 gradle 栏中签名报告文件的示例 ->
Gradle:如何在多个依赖项中拥有相同传递依赖项的单独版本
在我的 gradle 项目中,我使用以下依赖项: :光束-数据流-java :google-tink(1.7.0版本) 下面是传递依赖图: 梁-dataflow-java - > google-api-client:2.2.0 克...
使用 Gradle 进行 SonarCloud 分析的 Azure Pipeline 成功,但未发布结果
我尝试分析 Java 存储库,使用 Gradle 包装器进行构建,然后在我的 SonarCloud 组织中发布结果。 我正在使用 Azure DevOps Pipeline 进行构建,但是,我无法看到...
我有一个使用 Gradle 构建的 Java 项目,它具有不同的代码路径,具体取决于 JRE 位数。我正在为内部编写 JUnit 5 测试,但我需要在 64 位和 32 位 JRE 上运行它们。
在 iOS 中我们有类似 Android 上的 Gradle Build Flavors 的东西吗
在 iOS 中,我们有类似 Android 上的 Gradle Build Flavors 的东西。 基本上我想将 Applause SDK 与我的应用程序集成,但我不希望该代码成为发布版本的一部分。我只想...
在toml文件(gradle目录)中使用“模块”与“组”和“名称”有什么区别?
我正在将我的 Android 项目迁移到 gradle 目录,以便更好地管理依赖项。文档并没有说得很清楚,或者我错过了一些东西,但是你之间有什么区别......
在 WSL2 中使用 Gradle 对 Kotlin Spring Boot 应用程序进行 Docker 化是行不通的
我正在使用 WSL 2,想要使用 gradle (kotlin) 对 spring boot kotlin 应用程序进行 dockerize,并使其全部在 Docker 中运行,这样我就不必在本地安装任何内容。但每次我运行 docker-compose
使SLF4J在Android中登录Logcat并在测试中登录到控制台(gradle依赖问题)
我正在 Android Studio 中使用 gradle (Kotlin DSL) 进行构建,编写一个 Android 应用程序。我的目标是使用 SLF4J 并在运行时将所有日志从应用程序和第三方库重定向到 logcat...
Laravel 购物车页面,表单内有一个表单,用于处理删除和提交数据更新数据库
我有一个购物车页面,表格内有一个表格,也许你可以建议我应该做什么? 根据图片,我给出的蓝色圆圈是一个表格 我的刀片代码 我有一个购物车页面,表格内有一个表格,也许你可以建议我应该做什么?根据图片我给出的蓝色圆圈是一个表格我的刀片代码<table class="table"> <thead> <tr> <th scope="col">No</th> <th scope="col">Nama Barang</th> <th scope="col">Quantity</th> <th scope="col">Action</th> </tr> </thead> <tbody> @php $no = 1; @endphp @forelse ($permintaans as $b) <tr> <td>{{ $no ++ }}</td> <td> {{ $b->nama_kategori }} {{ $b->nama_atk }} </td> <td> <form action="{{ route('permintaan.update', $b->id) }}" method="POST" style="display: inline-block;"> @csrf @method('PUT') <div class="input-group input-group-sm mb-3"> <input type="number" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm" name="satuan_permintaan" min="0" max={{ $b->stok }} required> <span class="input-group-text" id="inputGroup-sizing-sm">{{ $b->subsatuan_atk }}</span> </div> </td> <td> <form action="{{ route('permintaan.destroy', $b->id) }}" method="POST" style="display: inline-block;"> @csrf @method('DELETE') <button type="submit" class="btn custom2-btn"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="red" class="bi bi-trash" viewBox="0 0 16 16"> <path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0z"/> <path d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4zM2.5 3h11V2h-11z"/> </svg></button> </form> </td> </tr> @empty @endforelse </tbody> </table> 我的控制器public function store(Request $request) { $task = new Permintaan(); $task->atk_id = $request->input('atk_id'); $task->proses = 'Proses'; if (Permintaan::where('atk_id', $task->atk_id)->exists()){ return redirect('/atk/permintaan')->with(['info' => 'ATK Sudah Dalam Permintaan']); } else{ $task->save(); return redirect()->route('permintaan.index'); } } public function destroy($id) { $permintaan = Permintaan::find($id); $permintaan->delete(); return redirect()->route('permintaan.index'); } 我要处理删除并提交数据更新数据库 在开始销毁表单之前关闭更新表单第一个表单标签(缺少)。
可以通过两种方式导入依赖管理。 插件{ id 'io.spring.dependency-management' 版本 '1.1.4' } 依赖项{ 实现平台("org.springframework.boot:spring-boot-
这是错误代码 构建文件 'C:\Users\SSAFY\Desktop\jae\pjt1\sub1\sculpture-project ackend_sculpture uild.gradle' 行:19 评估根项目“ssafy”时出现问题。 > org.gradle.api.
如何在 Gradle 脚本中传递默认 JVM 参数,同时允许扩展变量?
我的 build.gradle.kts 文件中有以下内容: 插件{ kotlin(“jvm”) 版本“1.9.20” 应用 } 应用 { mainClass.set("MainKt")
找不到phonepe.intentsdk.android.release:IntentSDK:2.4.1 React Native
android构建gradle: // 顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。 构建脚本{ 分机{ buildToolsVersion = "33.0.0"
我想通过此官方文档启用撰写指标。 在 root gradle 中我添加了以下内容: 子项目{ 任务.withType { 科特林选项 { ...
警告:将新的 ns schemas.android.com/repository/android/common/02 映射到旧的 ns schemas.android.com/repository/android/common/01 警告:映射新的 ns schemas.android.com/repository/android/ge...
NoSuchElementException 无限循环与 pmd DD 异常
我对编程有点陌生,对 gradle 和 pmd 插件也很陌生,所以请怜悯。 如果用户输入数字,scanner.nextLine() 将在每次迭代中抛出 NoSuchElementException ...
MVC ASP.NET Core Identity,创建登录、注册操作。 AuthController
公共类AuthController:控制器 { SignInManager _signInManager { 获取; } UserManager _userManager { 获取; } 角色管理器 public class AuthController : Controller { SignInManager<AppUser> _signInManager { get; } UserManager<AppUser> _userManager { get; } RoleManager<IdentityRole> _roleManager { get; } public AuthController(SignInManager<AppUser> signInManager, UserManager<AppUser> userManager, RoleManager<IdentityRole> roleManager) { _signInManager = signInManager; _userManager = userManager; _roleManager = roleManager; } public IActionResult Login() { return View(); } [HttpPost] public async Task<IActionResult> Login(string? returnUrl,LoginVM vm) { AppUser user; if (!ModelState.IsValid) { return View(vm); } if (vm.UsernameOrEmail.Contains("@")) { user = await _userManager.FindByEmailAsync(vm.UsernameOrEmail); } else { user = await _userManager.FindByNameAsync(vm.UsernameOrEmail); } if (user == null) { ModelState.AddModelError("", "Username or password is wrong"); return View(vm); } var result = await _signInManager.PasswordSignInAsync(user, vm.Password, vm.IsRemember, true); if (!result.Succeeded) { if (result.IsLockedOut) { ModelState.AddModelError("", "Too many attempts wait until " + DateTime.Parse(user.LockoutEnd.ToString()).ToString("HH:mm")); } else { ModelState.AddModelError("", "Username or password is wrong"); } return View(vm); } if (returnUrl != null) { return LocalRedirect(returnUrl); } return RedirectToAction("Index","Home"); } public IActionResult Register() { return View(); } [HttpPost] public async Task<IActionResult> Register(RegisterVM vm) { if (!ModelState.IsValid) { return View(vm); } var user = new AppUser { Fullname = vm.Fullname, Email = vm.Email, UserName = vm.Username }; var result = await _userManager.CreateAsync(user, vm.Password); if (!result.Succeeded) { foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } return View(vm); } var roleResult = await _userManager.AddToRoleAsync(user, Roles.Member.ToString()); if (!roleResult.Succeeded) { ModelState.AddModelError("", "Something went wrong. Please contact admin"); return View(vm); } return View(); } public async Task<IActionResult> Logout() { await _signInManager.SignOutAsync(); return RedirectToAction("Index", "Home"); } public async Task<bool> CreateRoles() { foreach (var item in Enum.GetValues(typeof(Roles))) { if (!await _roleManager.RoleExistsAsync(item.ToString())) { var result = await _roleManager.CreateAsync(new IdentityRole { Name = item.ToString() }); if (!result.Succeeded) { return false; } } } return true; } } } 所以,我在代码中搞乱了登录、注册和注销,现在这个 RoleManager 的事情让我摸不着头脑。我只是想为我的管理员用户提供一些额外的权力,但我有点不知道该怎么做。如果您能用简单的语言解释步骤或需要进行哪些更改来帮助我,那就太棒了。 我的目标是让管理员用户在我的系统中体验更好,您对此的建议非常有用。尝试了解 RoleManager 的事情以及如何为我的管理员用户提供更多能力。您直接的帮助可能会对我解决这个问题产生很大的影响! 定义管理员角色 创建管理员用户 更新注册流程: var roleResult =等待_userManager.AddToRoleAsync(用户,vm.IsAdmin? Roles.Admin.ToString() : Roles.Member.ToString()); 使用管理员角色: [授权(角色=“管理员”)] 公共 IActionResult AdminDashboard() { // 特定于管理的逻辑 } 5.提升管理能力: if (User.IsInRole("管理员")) { // 特定于管理的逻辑 } 中间件配置: services.AddIdentity() .AddRoles() .AddEntityFrameworkStores(); 7.创建角色方法: 公共无效配置(IApplicationBuilder 应用程序,IHostingEnvironment env) { // 其他中间件配置 // Create roles during application startup var authController = new AuthController(/* inject your dependencies here */); authController.CreateRoles().GetAwaiter().GetResult(); }
如何强制 Micronaut 预定作业等待应用程序启动完成?
我在 micronaut 应用程序中使用 @Scheduled - 注释实现了一些预定的 staks,如下所述:https://guides.micronaut.io/latest/micronaut-scheduled-gradle-java.html 这有效
Android 项目:找不到 org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.1
这是我遇到的错误 失败:构建失败并出现异常。 出了什么问题: 配置根项目“android”时出现问题。 无法解析所有配置文件':
Sonarqube 与 SonarScanner 之间的关系
我正在为我的基于 Android-Kotlin gradle 的项目设置 Sonar。我在那里设置了运行 ./gradlew Sonarqube 并生成报告的本地系统。 我遇到了另一个工具声纳运行器......
我创建了一个基准模块,并在其 build.gradle 文件中添加了一个托管设备,如下所示: 测试选项{ 托管设备{ 设备 { Pixel2API...
无法解析所有配置文件':app:androidJdkImage
我正在尝试从 android studio 在调试模式下构建 flutter apk。 颤振运行 我收到此错误: 在调试模式下在 sdk gphone x86 arm 上启动 lib/main.dart... 运行 Gradle 任务“assembleDebug”...
如何以编程方式调用junit5 @ParameterizedTest?
我有一堆junit 5测试,其中一些是参数化的,我想从java类中调用它们。 当保存在 src/test 中时,测试通过 IDE 或使用 gradle clean build 成功运行
React Native - 如何修复 Java.lang Double 无法转换为 java.lang.Boolean
我这几天遇到了一个烦人的问题(仅限Android)。 这似乎发生得很突然。我无法回避这个问题。请看下面我的gradle项目: 构建脚本...
我在 Spring-MVC 中显示 jsp 页面时遇到问题。 这是带有 Gradle 和 IntelliJ CE 的基本 hello world Spring-MVC: 我收到以下错误页面: 这是我的 build.gradle: 构建脚本{
具有baselineprofile宏基准测试的Android应用程序因profileinstaller库问题而失败
我试图通过尝试基本配置文件来提高应用程序的性能,但无法运行它。使用 gradle 8.2 配置项目并 'androidx.profileinstaller:profileinstaller:1.3.1' '安德烈...
cmd:找不到服务:活动#Error:ADB 在 flutter 中退出,退出代码为 1
更新android studio后,我运行我的flutter程序。 错误表明 在调试模式下在 IA 模拟器上的 AOSP 上启动 lib\main.dart... 运行 Gradle 任务“assembleDebug”... √ 构建构建...
从给定的 Jenkins 视图/选项卡禁用所有 Jenkins 作业
我在 Jenkins 中创建的名为“Gradle Deploys”的视图之一中有大约 100-120 个作业。如何仅从给定的视图/选项卡禁用 Jenkins 的所有作业。 我尝试了以下方法...
使用sonar gradle插件扫描Java 8 Spring启动项目以获取sonarqube,但它需要java 11
我的项目正在使用java 8和sonarqube插件id'org.sonarqube'版本'2.6.2'。当我使用命令 ./gradlew clean build 构建项目时,它构建得很好。 但是当我尝试运行 ./gradlew sonarqu...
如何在 Kotlin Gradle 中正确实现 PhotoView? (发现重复的类)
我一直很难尝试在我的 Android 应用程序中实现 PhotoView。我的知识非常基础,虽然我用谷歌搜索了很多,但我无法解决这个问题,因为每个教程都使用旧的
当我的 Java GUI 应用程序作为 Windows exe 文件运行时,System.out.println 不显示任何内容
我的 Java GUI 应用程序调用 System.out.println("foo");当它在 Eclipse 中运行或使用 Gradle 项目 (gradlew run) 从命令行运行时,它会按预期工作。该应用程序是一个 Swing GUI 应用程序...
我有一个包含以下内容的html字符串: 我有一个包含以下内容的html字符串: <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="spanish press" content="spain, spanish newspaper, news,economy,politics,sports"> <title></title> </head> <body id="body"> <!-- The following code will render a clickable image ad in the page --> <script src="http://www.myscript.com/a"></script> </body> </html> 我需要将该网站显示到 Android 中的网络视图中。 我尝试过这一切: webView.loadDataWithBaseURL(null, txt, "text/html", "UTF-8", null); webView.loadDataWithBaseURL("x-data://base", txt, "text/html", "UTF-8", null); webView.loadDataWithBaseURL("notreal/", txt, "text/htm", "utf-8",null); 我还尝试删除 DOCTYPE 标签: txt=txt.replace("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">", ""); 这些人都没有工作。我刚刚实现了将字符串显示到 webview(html 代码)中,但不是必须使用该 html 代码创建的网站。 出了什么问题? 在 WebView 中加载数据。调用WebView的loadData()方法 wv.loadData(yourData, "text/html", "UTF-8"); 你可以查看这个例子 http://developer.android.com/reference/android/webkit/WebView.html [编辑1] 您应该在 -- " 之前添加 -- \ -- 例如 --> name=\"spanish press\" 下面的字符串对我有用 String webData = "<!DOCTYPE html><head> <meta http-equiv=\"Content-Type\" " + "content=\"text/html; charset=utf-8\"> <html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1250\">"+ "<meta name=\"spanish press\" content=\"spain, spanish newspaper, news,economy,politics,sports\"><title></title></head><body id=\"body\">"+ "<script src=\"http://www.myscript.com/a\"></script>şlkasşldkasşdksaşdkaşskdşk</body></html>"; 你也可以试试这个 final WebView webView = new WebView(this); webView.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null); 从资产 html 文件中读取 ViewGroup webGroup; String content = readContent("content/ganji.html"); final WebView webView = new WebView(this); webView.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null); webGroup.addView(webView); 我有同样的要求,我是按照以下方式完成的。你也可以试试这个。 使用loadData方法 web.loadData(""" <p style='text-align:center'> <img class='aligncenter size-full wp-image-1607' title='' src="+movImage+" alt='' width='240px' height='180px' /> </p> <p> <center> <U> <H2>"+movName+"("+movYear+")</H2> </U> </center> </p> <p><strong>Director : </strong>"+movDirector+"</p> <p><strong>Producer : </strong>"+movProducer+"</p> <p><strong>Character : </strong>"+movActedAs+"</p> <p><strong>Summary : </strong>"+movAnecdotes+"</p> <p><strong>Synopsis : </strong>"+movSynopsis+"</p> """, "text/html", "UTF-8" ); movDirector movProducer 都是我的字符串变量。 简而言之,我保留了 URL 的自定义样式。 如果您正在 JetpackCompose 中寻找某些内容,这可以帮助您: @Composable fun HtmlTextVisualizerComponent(textFromData: String) { val mimeType = "text/html" val encoding = "UTF-8" LazyColumn( modifier = Modifier .padding( start = 24.dp, end = 24.dp, top = 16.dp, bottom = 24.dp, ), ) { items(1) { val state = rememberWebViewState( url = "data:$mimeType;$encoding,$textFromData", ) val navigator = rememberWebViewNavigator() WebView( state = state, modifier = Modifier.fillMaxSize(), navigator = navigator, onCreated = { it.settings.javaScriptEnabled = true }, ) } } } 一定不要忘记在你的 gradle 中添加依赖项: implementation "com.google.accompanist:accompanist-webview:0.30.1"