我目前正在为本机警报弹出窗口创建一个Android ANE。 我现在处于这样的地步,我认为我的Java和AS3代码都很好,但是当我尝试使用它时我遇到了错误。

主线程(已挂起:TypeError:错误#1009:无法访问空对象引用的属性或方法。)

我的问题是我真的不确定这个错误来自哪里。 我的想法是我没有正确构建ANE文件或者我的extension.xml文件中有问题,但我真的不太确定。

我将尝试尽可能多地提供有关此项目如何设置的信息。 现在我正试图在一个小的测试应用程序中使用这个ANE。

首先,文件夹设置:

ANEextensions-

     Alert_Java (holding my Java project)

          (Android/Java created assets. Not sure if these are important or now. If so I will list them)

          src

               com

                    fa

                         ne                        

                              android

                                   AlertContext.java

                                   AlertExtension.java

                                   ShowAlert.java

     Alert_AS

          bin

               AlertAndroidAS.swc

          src

               Alert.as

               extension.xml

因为我认为这是正确的,所以我不打算发布我的java代码。 但是,如果有人愿意花一些时间帮助我解决这个问题想看看,请告诉我。

这是我的extensions.xml文件

<extension xmlns="http://ns.adobe.com/air/extension/2.5">

<id>com.fa.alerts</id>

<versionNumber>1.0</versionNumber>

    <platforms>

        <platform name="Android-ARM">

            <applicationDeployment>

                <nativeLibrary>AndroidAlert.jar</nativeLibrary>

                <initializer>com.fa.ne.android.AlertExtension</initializer>

                <finalizer>com.fa.ne.android.AlertExtension</finalizer>

            </applicationDeployment>

        </platform>

    </platforms>

</extension>

这是我的Alert.as文件:

package {

    import flash.events.EventDispatcher;

    import flash.external.ExtensionContext;



    public class Alert extends EventDispatcher{

        public static var extContext:ExtensionContext = null

        public function Alert(){

            super();



            extContext = ExtensionContext.createExtensionContext("com.fa.alerts", null);



        }



        public static function androidAlert(aTitle:String, aMsg:String, aNeg:String = "Cancel", aPos:String = "Ok"):void{

            extContext.call("showAlert", aTitle, aMsg, aNeg, aPos);

        }

    }

}

这是我用来测试的存根应用程序

<?xml version="1.0" encoding="utf-8"?>

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 

        xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">



    <fx:Script>

        <![CDATA[



            protected function spawnAne(event:MouseEvent):void{



                var a:Alert = new Alert();

                Alert.androidAlert("test","testing");

            }

        ]]>

    </fx:Script>



    <fx:Declarations>

        <!-- Place non-visual elements (e.g., services, value objects) here -->

    </fx:Declarations>

    <s:Button click="spawnAne(event)" />

</s:View>

现在单击该按钮是导致错误的原因。

我的测试应用程序和AS3 Alert_AS项目之间没有任何类型的swc或链接。 我正在使用Flash Builder 4.6使用IDE工具导入ANE文件。

为了构建我的ANE,我在这篇文章中使用了一个经过轻微修改的bash脚本: http ://gotoandlearn.com/play.php?id = 149 by Lee Brimelow

# path to YOUR Android SDK
export AIR_ANDROID_SDK_HOME="my sdk"

# path to the ADT tool in Flash Builder sdks
ADT="my adt"

# native project folder
NATIVE_FOLDER=Alert_Java

# AS lib folder
LIB_FOLDER=Alert_AS

# name of ANE file
ANE_NAME=AndroidAlert.ane

# JAR filename
JAR_NAME=AndroidAlert.jar


# cert path
CERT_NAME=cert.p12

# cert password
CERT_PASS=password

#===================================================================

echo "****** preparing ANE package sources *******"

rm ${ANE_NAME}
rm -rf ./build/ane
mkdir -p ./build/ane
mkdir -p ./build/ane/Android-ARM
mkdir -p ./build/ane/Android-ARM/res

# copy resources
cp -R ./${NATIVE_FOLDER}/res/* ./build/ane/Android-ARM/res

# create the JAR file
jar cf ./build/ane/Android-ARM/${JAR_NAME} -C ./${NATIVE_FOLDER}/bin .

# grab the extension descriptor and SWC library 
cp ./${LIB_FOLDER}/src/extension.xml ./build/ane/
cp ./${LIB_FOLDER}/bin/*.swc ./build/ane/
unzip ./build/ane/*.swc -d ./build/ane
mv ./build/ane/library.swf ./build/ane/Android-ARM


echo "****** creating ANE package *******"

"$ADT" -package -storetype PKCS12 -keystore ./cert.p12 -storepass password -tsa none \
    -target ane \
    ${ANE_NAME} \
    ./build/ane/extension.xml \
    -swc ./build/ane/*.swc \
    -platform Android-ARM \
    -C ./build/ane/Android-ARM/ .

echo "****** ANE package created *******"

我知道这有点长,但任何帮助将不胜感激! 如果您需要更详细的说明,请随时告诉我

添加了Java代码

我稍微修改了原始代码。 我删除了AlertExtension.java并将get上下文函数移动到AlertContext.java。 我以为这会解决我的问题,但我仍然得到相同的结果。 这是我的代码:

AlertContext.java,我假设在var a:Alert = new Alert()之后触发了createContext方法;

package com.fa.ne.android;

import java.util.Map;
import java.util.HashMap;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;
import com.adobe.fre.FREFunction;

public class AlertContext extends FREContext implements FREExtension {

@Override
public FREContext createContext(String type){
    return new AlertContext();
}

@Override
public void initialize(){

}
@Override
public void dispose() {

}

@Override
public Map<String, FREFunction> getFunctions() {

    HashMap<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); 
    functionMap.put("showAlert", new ShowAlert());
    return functionMap;
}




}

这是我的ShowAlert课程

package com.fa.ne.android;

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREInvalidObjectException;
import com.adobe.fre.FREObject;
import com.adobe.fre.FRETypeMismatchException;
import com.adobe.fre.FREWrongThreadException;


public class ShowAlert implements FREFunction {

@Override
public FREObject call(FREContext aContext, FREObject[] aPassedArgs) {
    //get activity
    Activity a = aContext.getActivity();
    //grabbing context
    final FREContext context = aContext; 
    try{
        //getting the title and msg for alert as string
        String title = aPassedArgs[0].getAsString();
        String message = aPassedArgs[1].getAsString();
        String negitive = aPassedArgs[3].getAsString();
        String positive = aPassedArgs[4].getAsString();
        //creating the alert builder with the activity
        Builder builder = new Builder(a);
        //setting the title and msg
        builder.setTitle(title);
        builder.setMessage(message);
        //setting up buttons, negative and positive, each with an event so we can listen in AS3
        //doing listeners inline
        builder.setNegativeButton(negitive, new OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int dig){
                context.dispatchStatusEventAsync("nativeAlert", "negitive");
            }

        }).setNeutralButton(positive, new OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int dig){
                context.dispatchStatusEventAsync("positiveAlert", "positive");
            }
        });
        //done building, time to alert and return
        builder.create().show();

        return FREObject.newObject(true);

        //error handeling
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (FRETypeMismatchException e) {
        e.printStackTrace();
    } catch (FREInvalidObjectException e) {
        e.printStackTrace();
    } catch (FREWrongThreadException e) {
        e.printStackTrace();
    }

    return null;
}

}

===============>>#1 票数:1 已采纳

快速提示,创建一个功能,告诉您扩展是否可用。

public static function isSupported():Boolean
{
     return extContext != null;
}

希望这可以帮助。

此外,最好添加本机扩展的默认实现,这可以在动作脚本中进行,并且将在模拟器中运行应用程序时使用。

有关更多信息,请访问:

http://www.adobe.com/devnet/air/articles/extending-air.html

===============>>#2 票数:0

我无法回答你的问题。 我不懂Java(对我来说,它看起来像伪ActionScript)。 但是,这可能会为您提供一些帮助以及您可以在此处推荐的人,他们可以轻松地发现问题。

Piotr Walczyszyn在此创建了一个Android原生警报/推送扩展程序: http ://www.riaspace.com/2011/09/as3c2dm-air-native-extension-to-push-notifications-with-c2dm/

在评论中,我还发现另一个人在iOS中提供了大量的本机警报教程: http//www.liquid-photo.com/2011/10/28/native-extension-for-adobe-air-and-ios -101 /

我正在阅读关于Piotr的帖子的评论和他说的一些事情让我想知道这条线

extContext = ExtensionContext.createExtensionContext("com.fa.alerts", null);

可能导致/与此问题有关

希望这可以帮助您和/或其他人。

祝大家好运!

托德

...回到研究推送通知选项/生存能力= D.

===============>>#3 票数:0

我也一直在遇到你的问题。

我能够开始工作的唯一教程(有一些变化)就是这里找到的。

http://www.adobe.com/devnet/air/articles/developing-native-extensions-air.html

我不得不将-swf-version 13添加到flex库编译器中。

我不得不在adt命令中添加-tsa none来构建ANE文件。

===============>>#4 票数:0

您是否在FlashBuilder中将扩展程序链接到Android平台? 只需将其添加到“Flex Build Path”中的NativeExtension选项卡是不够的您还必须选中复选框

“Flex Build Packaging”>>“Google Andorid”>>“原生扩展”

你也可以试着看看差异和maby的东西将有助于我的项目: NativeAlert

  ask by francis translate from so

未解决问题?本站智能推荐:

2回复

Adobe本机扩展缺少实施

我是开发Air Native Extension的新手,出于学习目的,我正在为Android-ARM创建一个简单的air扩展,它将添加和减去2个数字。 我跟着这个教程turorial 。 我的目录结构如下: 我正在使用以下命令制作ane文件: 但是,当我运行命令创建ane文件
2回复

Flex移动相机+本机扩展

我已经在Adobe发行前论坛上问过这个问题,但他们保持沉默,因此我需要您的帮助! 我需要制作一个应用程序,该应用程序应该能够在向服务器传输实时视频的过程中在Android设备上打开/关闭闪光灯。 所以我做了扩展。 Java函数很简单: 我在前后摄像头上使用了HTC Desi
1回复

如何将Air Native Extension添加到舞台

我需要在Flex Mobile应用程序中显示使用Android SDK用Java编写的活动。 我已经看到它是通过Map ANE完成的,但是找不到任何示例代码或任何此类代码。 我已经创建了ANE工作所需的Java和ActionScript代码(创建了活动,并且存在真正桥接Java和AS3所需的
2回复

将AIR Native Extension与FLA项目集成

我正在尝试使用IOS应用内原生扩展程序,该扩展程序位于(http://code.google.com/p/in-app-purchase-air-ios/),并且已将SWC与我的Flash专案... 我遇到的问题是,所有用法代码都在谈论与Flex项目集成而不是FLA集成-有人知道是否可以移
3回复

flex android动作脚本原生扩展

我在flex中为android设计了一个原生扩展,我对这个扩展有问题。 我已经打包了ane文件,我已经添加到android flex项目并且它正确编译但是在运行时我有一个错误,说我找不到我的动作脚本扩展类。 VerifyError:错误#1014:找不到类myClass。
4回复

Flex Mobile:如何查看皮肤?

我想知道是否可以对Flex 移动应用程序进行外观查看: 我的ActivityView.as 我的ActivityViewSkin.mxml (与皮肤相关) 这是进行移动开发的好方法吗? 我该如何在皮肤上使用它: 非常感谢你 ! 安东尼
1回复

Flex / AIR应用程序桌面工具栏

我目前正在使用Flex框架构造AIR应用程序,以在Windows平台上进行部署,并且(出于UX的考虑)最好将主应用程序窗口用作屏幕右边缘的Application Desktop Toolbar (类似于“停靠”时使用新的Facebook Desktop Messenger应用程序)。 使用
1回复

Flex Mobile:PersistenceManager不保存数据(仅在某些iPad上)

使用AS3和AIR14。我有一个函数(save())在用户登录后保存用户名,还有一个函数(get())在每次重新启动应用程序时获取用户名,因此用户不必重新登录并可以脱机工作。 这可以在我的iPad 2和3上使用,但是我还有另一个iPad 3在这上不能使用。 当应用程序完全关闭并重新打开时,“
1回复

Flex Mobile-制作滚动视图

在Flex Mobile应用程序中,我有一个包含“标题”的视图,该标题是图像的轮播和2列列表(附加图像上的点1)。 该列表是可滚动的,效果很好,但是滚动时标题保持固定。 什么是滚动整个视图的最佳方法。 我希望标题移动并且列表要在全屏上显示新元素。 这是一张可能有帮助的图像:
1回复

如何为Flex Mobile制作简单的动作脚本itemrenderer?

我一直在制作mxml itemRenderers,但据我在adobe上听到的消息,对于Flex Mobile项目,他们一直说:“仅使用actionscript3制作项目渲染器,不使用mxml” 所以...我有此列表,我将尝试以最佳方式重新制作动作脚本中的itemRenderer。 有人可