在执行将使用java库获取数据的基于本机的java代码之前,如何显示颤振的第一个屏幕
我在做一个关于flifter的项目,它必须从互联网上获取数据。我试图用dart来完成它,但不可能,所以我决定用java来完成它,它解决了这个问题。在加载屏幕显示在屏幕上之前,本机java代码开始执行,然后它显示一些白色屏幕,然后它就转到主页在那里,我可以让我的加载屏幕先出现,然后在加载屏幕显示时从互联网加载数据,用户等待,加载结束后将屏幕推到主屏幕。 我试着将睡眠持续时间设置为1秒,这样它就可以先渲染加载屏幕,但没有成功 这是我的java代码在执行将使用java库获取数据的基于本机的java代码之前,如何显示颤振的第一个屏幕,java,flutter,dart,Java,Flutter,Dart,我在做一个关于flifter的项目,它必须从互联网上获取数据。我试图用dart来完成它,但不可能,所以我决定用java来完成它,它解决了这个问题。在加载屏幕显示在屏幕上之前,本机java代码开始执行,然后它显示一些白色屏幕,然后它就转到主页在那里,我可以让我的加载屏幕先出现,然后在加载屏幕显示时从互联网加载数据,用户等待,加载结束后将屏幕推到主屏幕。 我试着将睡眠持续时间设置为1秒,这样它就可以先渲染加载屏幕,但没有成功 这是我的java代码 public class MainActivity
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "samples.flutter.dev/battery";
@Override
public void configureFlutterEngine( FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if (call.method.equals("getDate")) {
try {
result.success(getReal2());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
else {
result.notImplemented();
}
}
);
}
public static List getCoffee() throws IOException {
ArrayList coffee = new ArrayList();
Document doc;
doc= Jsoup.connect("https://www.bankofabyssinia.com").timeout(6000).get();
for(int i=0;i<=8;i++) {
for (int j=2;j<=3;j++){
coffee.add(doc.select(" #myTable > tbody > tr:nth-child("+i+") > td:nth-child("+j+")").text());
}
}
return coffee;
}
@TargetApi(Build.VERSION_CODES.N)
public List getReal2() throws ExecutionException, InterruptedException {
CompletableFuture<List > completableFuture = CompletableFuture.supplyAsync(() -> {
try {
return getCoffee();
} catch (IOException e) {
e.printStackTrace();
}
return null;
});
while (!completableFuture.isDone()) {
}
List result = completableFuture.get();
return result;
}
}
公共类main活动扩展了公共类main活动{
专用静态最终字符串通道=“samples.flatter.dev/battery”;
@凌驾
公共无效配置颤振引擎(颤振引擎颤振引擎){
超级配置颤振发动机(颤振发动机);
新方法通道(flatterEngine.getDartExecutor().getBinaryMessenger(),通道)
.setMethodCallHandler(
(电话,结果)->{
if(call.method.equals(“getDate”)){
试一试{
result.success(getReal2());
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
}
否则{
result.notImplemented();
}
}
);
}
公共静态列表getCoffee()引发IOException{
ArrayList咖啡=新的ArrayList();
文件文件;
doc=Jsoup.connect(“https://www.bankofabyssinia.com)超时(6000.get();
对于(int i=0;i{
试一试{
返回getCoffee();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
});
而(!completableFuture.isDone()){
}
列表结果=completableFuture.get();
返回结果;
}
}
这是我的颤振代码
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'Home.dart';
class Load extends StatefulWidget {
@override
_LoadState createState() => _LoadState();
}
class _LoadState extends State<Load> {
static const platform = const MethodChannel('samples.flutter.dev/battery');
void getWholeJava() async {
try {
final List result = await platform.invokeMethod('getDate');
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (BuildContext context) => Home(
whole: result,
)));
} on PlatformException catch (e) {
print(e);
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
getWholeJava();
}
@override
Widget build(BuildContext context) {
return Scaffold(body: Builder(builder: (BuildContext context) {
return Container(
child: Center(
child: Column(
children: <Widget>[
Text(
'The app is loading',
style: TextStyle(
fontSize: 40.0,
fontWeight: FontWeight.w900,
color: Colors.green[900]),
),
],
)),
);
}));
}
}
导入“dart:io”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
输入“Home.dart”;
类加载扩展了StatefulWidget{
@凌驾
_LoadState createState()=>\u LoadState();
}
类_LoadState扩展了状态{
静态常数平台=常数方法通道('samples.flatter.dev/battery');
void getWholeJava()异步{
试一试{
最终列表结果=wait platform.invokeMethod('getDate');
导航器.of(上下文).pushReplacement(MaterialPage路线(
生成器:(BuildContext上下文)=>Home(
整体:结果,
)));
}平台上异常捕获(e){
印刷品(e);
}
}
@凌驾
void initState(){
//TODO:实现initState
super.initState();
getWholeJava();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(主体:生成器(生成器:(BuildContext上下文){
返回容器(
儿童:中心(
子:列(
儿童:[
正文(
“应用程序正在加载”,
样式:TextStyle(
字体大小:40.0,
fontWeight:fontWeight.w900,
颜色:颜色。绿色[900]),
),
],
)),
);
}));
}
}
首先,android将默认为其启动屏幕,该屏幕由模板flift android项目中的launch\u background.xml
管理。这意味着您需要为启动屏幕使用背景色,这将与android本机启动屏幕可绘制一起使用
接下来,要实现一个启动屏幕,该屏幕将导航到一个页面,您可以在其中运行和加载数据,您可以查看以下内容:
import 'package:async/async.dart';
class SampleSplashScreenPage extends StatefulWidget {
@override
_SampleSplashScreenPageState createState() => new _SampleSplashScreenPageState();
}
class _SampleSplashScreenPageState extends State<SampleSplashScreenPage> {
@override
void initState() {
super.initState();
new RestartableTimer(new Duration(seconds: 3), () async {
await Navigator.push(context, MaterialPageRoute(builder: (_) {
return FlutterDataLoadingPage();
}));
});
}
@override
Widget build(BuildContext context) {
return new Text("Your splash screen");
}
import'package:async/async.dart';
类SampleSplashScreenPage扩展StatefulWidget{
@凌驾
_SamplesPlashScreenPagentate createState()=>新建_SamplesPlashScreenPagentate();
}
类_samplesPlashScreenPeartate扩展状态{
@凌驾
void initState(){
super.initState();
新的重启计时器(新的持续时间(秒:3),()异步{
wait Navigator.push(上下文,MaterialPage路由(生成器:(){
返回DataLoadingPage();
}));
});
}
@凌驾
小部件构建(构建上下文){
返回新文本(“您的启动屏幕”);
}
RestartableTimer
是一个类,它将启动秒表,并将计数到指定的持续时间。一旦达到此持续时间,它将调用您传递给它的处理程序,在本例中,该处理程序是负责读取远程数据的页面的导航逻辑。顺便说一句,此计数器不会重新启动,并将自动运行垃圾收集器无法处理这些垃圾
查看文档以了解更多信息:
这看起来像是一个问题。你肯定可以解析HTML而不必编写到Java的桥接器吗?我尝试使用webscraper包。问题是CSS查询选择器方法不接受用于从表中删除数据的第n个子选择器,因为我的任务无法完成,所以我不得不将脸转向JavaMate,感谢它成功了真的,你为我节省了很多时间!