【问题标题】:I can´t call an activity from a jar file我不能从 jar 文件中调用活动
【发布时间】:2013-03-22 11:50:54
【问题描述】:

我有这种情况:我有一个包含 jar 文件的主项目(一个为主项目提供一些信息的辅助项目)。我在 tuto 之后创建了 jar 文件,然后将 jar 文件添加到 /libs 中的主项目中,然后将其添加到 Build Path 中。

当我从 jar 文件中调用活动时,会出现致命异常

这是日志猫

03-22 12:47:09.509: D/AndroidRuntime(13341): Shutting down VM
03-22 12:47:09.509: W/dalvikvm(13341): threadid=1: thread exiting with uncaught exception (group=0x40018578)
03-22 12:47:09.529: E/AndroidRuntime(13341): FATAL EXCEPTION: main
03-22 12:47:09.529: E/AndroidRuntime(13341): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.XXX.YYY/com.XXX.YYY.Subscription}; have you declared this activity in your AndroidManifest.xml?
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.app.Activity.startActivityForResult(Activity.java:2827)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at com.example.principal.Principal$1.onClick(Principal.java:40)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.view.View.performClick(View.java:2485)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.view.View$PerformClick.run(View.java:9080)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.os.Handler.handleCallback(Handler.java:587)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.os.Looper.loop(Looper.java:130)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at android.app.ActivityThread.main(ActivityThread.java:3687)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at java.lang.reflect.Method.invokeNative(Native Method)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at java.lang.reflect.Method.invoke(Method.java:507)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-22 12:47:09.529: E/AndroidRuntime(13341):    at dalvik.system.NativeStart.main(Native Method)

这就是我在主项目中调用活动的方式

final Intent intent = new Intent();
        
        Button juego1Btn = (Button) findViewById(R.id.juego1Btn);
        
        juego1Btn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                /*Intent intent = new Intent(getBaseContext(), Subscription.class);
                startActivity(intent);*/
                intent.setAction(Intent.ACTION_MAIN);
                intent.setClassName("com.XXX.YYY", "com.XXX.YYY.Subscription");
                intent.putExtra("code", codigo);
                intent.putExtra("keyword", keyword);
                startActivityForResult(intent, 1);
            }
        });

这是清单

<activity
            android:name="com.XXX.YYY.Subscription"
            android:label="@string/app_name">
</activity>

知道为什么我有那个异常吗??

非常感谢!!!

【问题讨论】:

    标签: android jar activitynotfoundexception


    【解决方案1】:

    首先,com.XXX.YYY.Subscription 必须是 com.telecoming.sms_payment.Subscription,如果您的代码可信的话。

    其次,不要以这种方式创建您的Intent,因为您的&lt;activity&gt; 并不声称支持ACTION_MAIN。将您的代码替换为:

        Button juego1Btn = (Button) findViewById(R.id.juego1Btn);
    
        juego1Btn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(WhateverYourActivityClassIsWhereYouAreRightNow.this, Subscription.class);
                intent.putExtra("code", codigo);
                intent.putExtra("keyword", keyword);
                startActivityForResult(intent, 1);
            }
        });
    

    (将WhateverYourActivityClassIsWhereYouAreRightNow 替换为该代码所在的Activity 的名称)

    【讨论】:

    • 感谢 CoomnsWare,我按照你说的做了,但 Subscription.class 无法解析为类型。我也在主活动import com.telecoming.sms_payment.*中导入了包;
    • @Ivan:那么你显然没有一个名为com.telecoming.sms_payment.Subscription 的类。这就是为什么你应该使用我推荐的Intent 构造函数的原因,所以你会得到编译时错误。要么你需要实现这个类,要么你需要阅读Subscription类文件顶部的package语句来了解正确的包名是什么。
    • com.telecoming.sms_payment.Subscription 是 jar 文件中 te 活动的名称,如果我有意调用该方法,是否需要实现该类?如果是,我该怎么做??
    • @Ivan: "com.telecoming.sms_payment.Subscription 是 jar 文件中 te 活动的名称" - 那么 JAR 文件不在 libs/ 中,或者你搞砸了构建路径手动。
    • 是的,JAR 在库中,这是一个巨大的混乱 CommonsWare...我有一个 jar 文件,用于检查一个人是否被订阅,我将它用于不同的应用程序。在新项目中,我将 jar 文件放在 libs 中,然后将其作为 Jar 添加到 Build Path 中。现在我不知道如何获取 jar 文件在调用时提供的信息。也许我没有正确地提出问题
    【解决方案2】:

    问题出在我创建库的方式上,通过按照这个教程一步一步地工作正常http://es.slideshare.net/ajdgeniz/como-hacer-un-archivo-jar-en-eclipse

    谢谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      相关资源
      最近更新 更多