Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从gluon CharmListView切换视图在桌面上有效,但在Android中不起作用_Java_Android_Gluon_Gluon Mobile - Fatal编程技术网

Java 从gluon CharmListView切换视图在桌面上有效,但在Android中不起作用

Java 从gluon CharmListView切换视图在桌面上有效,但在Android中不起作用,java,android,gluon,gluon-mobile,Java,Android,Gluon,Gluon Mobile,所以我一直在做一个项目,我有一个CharmListView,其中填充了要使用的任务的名称。我可以通过我的登录屏幕登录,进入CharmListView并单击我想要打开的任务。当我测试它时,它会在桌面上打开,但在Android中它失败了,说找不到位置,并且: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void com.glionhq.charm.glisten.mvc.View.setName(java.lang.String) 以下是我的魅力课程

所以我一直在做一个项目,我有一个CharmListView,其中填充了要使用的任务的名称。我可以通过我的登录屏幕登录,进入CharmListView并单击我想要打开的任务。当我测试它时,它会在桌面上打开,但在Android中它失败了,说找不到位置,并且:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void com.glionhq.charm.glisten.mvc.View.setName(java.lang.String)

以下是我的魅力课程:

这一个本质上是任务模型

public class CharmHomeNavTask {
private String taskName;
private String taskDesc;

private static final Image IMAGE_ADMIN = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/admin.png"));
private static final Image IMAGE_AUDIT_TOOL = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/auditTool.png"));
private static final Image IMAGE_CONSOLIDATE_PACKAGE = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/consolidatePackage.png"));
private static final Image IMAGE_DISPOSAL = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/disposal.png"));
private static final Image IMAGE_EQUIP_MANGAGE = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/equipmentManagement.png"));
private static final Image IMAGE_INTRA_TRANSFER = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/intratransfer.png"));
private static final Image IMAGE_PICKUP = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/pickup.png"));
private static final Image IMAGE_TRU_WASTE_PREP = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/truWastePrep.png"));
private static final Image IMAGE_VISUAL_INSPECTION = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/visualInspection.png"));
private static final Image IMAGE_WALL2WALL = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/wall2wall.png"));
private static final Image IMAGE_WASTE_ID = new Image(WcatsAndroidDemo.class.getResourceAsStream("/gov/lanl/taskImages/wasteIdentification.png"));

private static Image[] listOfImages = {IMAGE_WASTE_ID, IMAGE_VISUAL_INSPECTION, IMAGE_TRU_WASTE_PREP, IMAGE_CONSOLIDATE_PACKAGE, IMAGE_INTRA_TRANSFER, IMAGE_PICKUP, IMAGE_DISPOSAL, IMAGE_ADMIN, IMAGE_WALL2WALL,
        IMAGE_EQUIP_MANGAGE, IMAGE_AUDIT_TOOL };

public CharmHomeNavTask(String taskName, String taskDesc){
    this.taskName = taskName;
    this.taskDesc = taskDesc;
}

public String getTaskName() {
    return taskName;
}

public void setTaskName(String taskName) {
    this.taskName = taskName;
}

public String getTaskDesc() {
    return taskDesc;
}

public void setTaskDesc(String taskDesc) {
    this.taskDesc = taskDesc;
}

public static void setListOfImages(Image[] listOfImages) {
    listOfImages = listOfImages;
}

public static Image[] getListOfImages(){
    return listOfImages;
}

public static Image getSingleImageFromList(int index){
    return listOfImages[index];
}
}
这是将任务创建为可观察列表

public class CharmHomeNavTasks {


public static ObservableList<CharmHomeNavTask> tasksList = FXCollections.observableArrayList(
        new CharmHomeNavTask("Waste Identification", "Identify you waste from this screen."),
        new CharmHomeNavTask("TRU Visual Inspection", "Visual Inspection of TRU waste."),
        new CharmHomeNavTask("TRU Drum Preparation", "Prepare your TRU drums here."),
        new CharmHomeNavTask("Consolidation/Packaging", "Consolidate and package your waste."),
        new CharmHomeNavTask("Intra-Facility Transfer", "Transferring of waste within the same facility."),
        new CharmHomeNavTask("Inter-Facility Pickup", "Picking up waste within the same facility."),
        new CharmHomeNavTask("Disposal Tasks", "Disposal of waste tasks."),
        new CharmHomeNavTask("Administrative Tasks", "Administrators have special tasks they can perform here."),
        new CharmHomeNavTask("Wall-Wall Inventory", "Wall to Wall inventory tasks."),
        new CharmHomeNavTask("Equipment Management", "Waste related equipment tasks."),
        new CharmHomeNavTask("Audit Support Tool", "Tool for audit related tasks."));

public static ObservableList<CharmHomeNavTask> getTasksList() {
    return tasksList;
}
}
public类CharmHomeNavTasks{
公共静态ObservableList tasksList=FXCollections.observableArrayList(
新建CharmHomeAvtask(“废物识别”,“从此屏幕识别您的废物”),
新CharmHomeNavTask(“TRU目视检查”、“TRU废物目视检查”),
新的CharmHomeNavTask(“TRU鼓准备”,“在这里准备您的TRU鼓”),
新的CharmHomeNavTask(“整合/包装”,“整合和包装您的废物”),
新CharmHomeNavTask(“设施内转移”、“同一设施内废物转移”),
新的CharmHomeNavTask(“设施间捡拾”、“在同一设施内捡拾废物”),
新CharmHomeNavTask(“处置任务”、“废物处置任务”),
新的CharmHomeAvtask(“管理任务”,“管理员可以在此处执行特殊任务”),
新的CharmHomeNavTask(“墙壁库存”、“墙壁到墙壁库存任务”),
新CharmHomeNavTask(“设备管理”、“废物相关设备任务”),
新的CharmHomeNavTask(“审计支持工具”、“审计相关任务工具”);
公共静态可观察列表getTasksList(){
返回任务列表;
}
}
这是一个给我带来麻烦的问题,因为我在这里有onMouseClicked事件,并且我将项目(或任务)设置为selected。这似乎在Android上也能正常工作,因为我可以通过系统告诉我点击了哪个项目

public class CharmHomeNavTaskCell extends CharmListCell<CharmHomeNavTask> {

private final ListTile tile;
private final ImageView imageView;
private CharmHomeNavTask item;
public CharmHomeNavTask carryOverItem;


public CharmHomeNavTaskCell(CharmListView listView){
    tile = new ListTile();
    imageView = new ImageView();
    tile.setPrimaryGraphic(imageView);
    carryOverItem = item;
    tile.setOnMouseClicked(e -> {
        System.out.println("*******************  Item clicked " + item.getTaskName());
        listView.setSelectedItem(item);
    });
    setText(null);
}

@Override
public void updateItem(CharmHomeNavTask item, boolean empty){
    super.updateItem(item, empty);
    this.item = item;
    imageView.setFitWidth(32);
    imageView.setFitHeight(32);
    if (item != null && !empty) {
        tile.textProperty().setAll(item.getTaskName() + " ", item.getTaskDesc());
        tile.setWrapText(true);
        final Image[] image = CharmHomeNavTask.getListOfImages();

            super.setStyle("-fx-font-weight: bold");
            switch (item.getTaskName()) {
                case "Waste Identification":
                    imageView.setImage(image[0]);
                    break;
                case "TRU Visual Inspection":
                    imageView.setImage(image[1]);
                    break;
                case "TRU Drum Preparation":
                    imageView.setImage(image[2]);
                    break;
                case "Consolidation/Packaging":
                    imageView.setImage(image[3]);
                    break;
                case "Intra-Facility Transfer":
                    imageView.setImage(image[4]);
                    break;
                case "Inter-Facility Pickup":
                    imageView.setImage(image[5]);
                    break;
                case "Disposal Tasks":
                    imageView.setImage(image[6]);
                    break;
                case "Administrative Tasks":
                    imageView.setImage(image[7]);
                    break;
                case "Wall-Wall Inventory":
                    imageView.setImage(image[8]);
                    break;
                case "Equipment Management":
                    imageView.setImage(image[9]);
                    break;
                case "Audit Support Tool":
                    imageView.setImage(image[10]);
                    break;
            }
            setGraphic(tile);
    } else {
        setGraphic(null);
    }
}
}
公共类CharmHomeAvtaskCell扩展了CharmListCell{
私人最终名单;
私人最终影像视图;
私有CharmHomeNavTask项;
公共CharmHomeNavTask carryovitem;
公共CharmHomeNavTaskCell(CharmListView列表视图){
tile=新列表tile();
imageView=新的imageView();
tile.setPrimaryGraphic(imageView);
结转检验=项目;
tile.setonMouseClacked(e->{
System.out.println(“****************Item单击”+Item.getTaskName());
listView.setSelectedItem(项目);
});
setText(空);
}
@凌驾
public void updateItem(CharmHomeAvTask项,布尔值为空){
super.updateItem(项,空);
this.item=项目;
imageView.setFitWidth(32);
imageView.setFitHeight(32);
如果(项!=null&&!空){
tile.textProperty().setAll(item.getTaskName()+“”,item.getTaskDesc());
tile.setWrapText(true);
最终图像[]图像=CharmHomeAvTask.getListOfImages();
super.setStyle(“-fx字体大小:粗体”);
开关(item.getTaskName()){
案例“废物识别”:
setImage(图像[0]);
打破
案例“TRU目视检查”:
setImage(图[1]);
打破
案例“TRU滚筒准备”:
setImage(图[2]);
打破
案例“合并/打包”:
setImage(图[3]);
打破
案例“贷款内转账”:
setImage(图[4]);
打破
案例“设施间取货”:
setImage(图[5]);
打破
案例“处置任务”:
setImage(图[6]);
打破
案例“行政任务”:
setImage(图[7]);
打破
案例“墙壁库存”:
setImage(图[8]);
打破
案例“设备管理”:
setImage(图[9]);
打破
案例“审计支持工具”:
setImage(图[10]);
打破
}
地砖;
}否则{
设置图形(空);
}
}
}
下面是AppViewManager类。我使用的是闪光和加力,只是为了让你们知道

public class AppViewManager {

private static String getLoggedInUser(User user){
    if (user != null) {
        return user.getId();
    } else {
        return "Not Logged In";
    }
}

public static final AppViewRegistry REGISTRY = new AppViewRegistry();

public static final AppView PRIMARY_VIEW = view("Home", PrimaryPresenter.class, MaterialDesignIcon.HOME, SHOW_IN_DRAWER, HOME_VIEW);
public static final AppView SECONDARY_VIEW = view("Task List", SecondaryPresenter.class, MaterialDesignIcon.LIST, SHOW_IN_DRAWER);
public static final AppView SETTINGS_VIEW = view("Settings", SettingsView.class, MaterialDesignIcon.SETTINGS_APPLICATIONS, SHOW_IN_DRAWER);
public static final AppView INTRAFACILITYTRANSFER_VIEW = view("Intra-Facility Transfer", IntraFacilityView.class, MaterialDesignIcon.EDIT_LOCATION);


private static AppView view(String title, Class<? extends GluonPresenter<?>> presenterClass, MaterialDesignIcon menuIcon, AppView.Flag... flags ) {
    return REGISTRY.createView(name(presenterClass), title, presenterClass, menuIcon, flags);
}

private static String name(Class<? extends GluonPresenter<?>> presenterClass) {
    return presenterClass.getSimpleName().toUpperCase(Locale.ROOT).replace("PRESENTER", "");
}

public static void registerViewsAndDrawer(MobileApplication app) {
    for (AppView view : REGISTRY.getViews()) {
        view.registerView(app);
    }

    Image image = new Image(WcatsAndroidDemo.class.getResourceAsStream("/icon.png"));


    NavigationDrawer.Header header = new NavigationDrawer.Header("\nWCATS" + "- " + getLoggedInUser(WcatsAndroidDemo.getInstance().getLoggedUser()),
            "Waste Management System", new ImageView(image));

    // TODO: Add a footer to the drawer that contains settings, help & feedback, and About

    NavigationDrawer.Footer footer = new NavigationDrawer.Footer("No tasks currently need to be synchronized.", null);

    //Create the sub items for the drawer
    NavigationDrawer.Item about = new NavigationDrawer.Item("About", MaterialDesignIcon.INFO.graphic());
    NavigationDrawer.Item logOut = new NavigationDrawer.Item("Logout", MaterialDesignIcon.EXIT_TO_APP.graphic());
    // TODO: make the rest of the submenu items that go in the header.
    DefaultDrawerManager drawerManager = new DefaultDrawerManager(app, header, REGISTRY.getViews()) {
        {

            NavigationDrawer drawer = getDrawer();
            drawer.visibleProperty().addListener((observable, oldValue, newValue) -> {
                if (newValue){
                    header.setTitle("\nWCATS - " + getLoggedInUser(WcatsAndroidDemo.getInstance().getLoggedUser()));
                }
            });
            // Add items
            drawer.setFooter(footer);
            footer.setStyle("-fx-text-size: 6");
            drawer.getItems().addAll(new Separator(), about, logOut, new Separator());
            // TODO: provide action based on item selected
            drawer.selectedItemProperty().addListener(((observable, oldValue, newValue) -> {
                if(newValue.equals(about)) {
                    System.out.println("test");
                } else if (newValue.equals(logOut)){
                    WcatsAndroidDemo.getInstance().userLogout();
                } else if (newValue.equals(SECONDARY_VIEW.getMenuItem())){
                    if (getLoggedInUser(WcatsAndroidDemo.getInstance().getLoggedUser()).equals("Not Logged In")) {
                        AppViewManager.PRIMARY_VIEW.switchView();
                    } else {
                        AppViewManager.SECONDARY_VIEW.switchView();
                    }
                }
            } ));

        }

    };
    drawerManager.installDrawer();
}
}
公共类AppViewManager{
私有静态字符串getLoggedInUser(用户){
如果(用户!=null){
返回user.getId();
}否则{
返回“未登录”;
}
}
公共静态最终AppViewRegistry注册表=新AppViewRegistry();
public static final AppView PRIMARY\u VIEW=视图(“Home”,PRIMARY presenter.class,MaterialDesignIcon.Home,在抽屉中显示,Home\u视图);
public static final AppView SECONDARY\u VIEW=VIEW(“任务列表”,SECONDARY presenter.class,MaterialDesignIcon.List,在抽屉中显示);
公共静态最终应用程序视图设置\u视图=视图(“设置”,设置视图.class,材质设计.SETTINGS\u应用程序,在抽屉中显示);
公共静态最终应用程序视图设施内传输视图=视图(“设施内传输”,设施内视图.class,物料设计.编辑位置);
私有静态AppView视图(字符串标题,类>presenterClass,MaterialDesignIcon菜单,AppView.Flag…标志){
返回REGISTRY.createView(名称(presenterClass)、标题、presenterClass、菜单项、标志);
}
私有静态字符串名称(类>presenterClass){
返回presenterClass.getSimpleName().toUpperCase(Locale.ROOT)。替换(“PRESENTER”,“PRESENTER”);
}
public class SecondaryPresenter extends GluonPresenter<WcatsAndroidDemo> {

@FXML
private View homeView;

@FXML
public CharmListView<CharmHomeNavTask, Integer> charmListView;

public void initialize() {
    homeView.setShowTransitionFactory(BounceInRightTransition::new);

    AppBar appBar = getApp().getAppBar();
    homeView.showingProperty().addListener((observable, oldValue, newValue) -> {
        appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> getApp().showLayer(DRAWER_LAYER)));
        appBar.setTitleText("Task Selection");
    });
    charmListView.setFloatingHeaderVisible(false);
    charmListView.setItems(CharmHomeNavTasks.getTasksList());
    charmListView.setCellFactory(param -> new CharmHomeNavTaskCell(charmListView));
    charmListView.selectedItemProperty().addListener((observable, oldValue, newValue) -> {
        if (newValue.getTaskName().equals("Intra-Facility Transfer")){
            AppViewManager.INTRAFACILITYTRANSFER_VIEW.switchView(ViewStackPolicy.SKIP);
        }
    });
}
}
public class IntraFacilityView extends GluonPresenter<WcatsAndroidDemo> {

@FXML
public ChoiceBox facilityCMBox;
@FXML
public ChoiceBox storageUnitOrgCMBox;
@FXML
public ChoiceBox storageUnitDestCMBox;
@FXML
public ChoiceBox gridXCMBox;
@FXML
public ChoiceBox gridYCMBox;
@FXML
public ChoiceBox gridZCMBox;
@FXML
public CheckBox organizeUnitCHKBox;

@FXML
public Button viewMoreReqsBTN;
@FXML
public Button viewPendingMovesBTN;
@FXML
public Button resumeTaskBTN;

@FXML
private View intrafacility;


public void initialize(){
    intrafacility.setShowTransitionFactory(BounceInRightTransition::new);
    intrafacility.showingProperty().addListener((observable, oldValue, newValue) -> {
        if (newValue) {
            AppBar appBar = getApp().getAppBar();
            appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> {
                getApp().showLayer(DRAWER_LAYER);
            }));

            appBar.setTitleText("Intra-Facility Transfer");
            appBar.getActionItems().add(MaterialDesignIcon.CLOSE.button(e -> {
                AppViewManager.SECONDARY_VIEW.switchView();
            }));
        }
    });

}

public void handleOrganizeUnitsCHKBox(ActionEvent actionEvent) {
}

public void handleViewMoreReqs(ActionEvent actionEvent) {
}

public void handleResumeTask(ActionEvent actionEvent) {
}

public void handlevVewPendingMoves(ActionEvent actionEvent) {
}
}