【问题标题】:Class not found Exception in phonegap android在phonegap android中找不到类异常
【发布时间】:2013-11-11 10:54:56
【问题描述】:

我正在尝试通过电子邮件和 phonegap 中的短信发送照片图像,因此编写了充当 Java 原生代码桥梁的插件。问题是当我单击 html 中的共享按钮时弹出“找不到类”警报。即使在 config.xml 文件中正确声明了插件名称,我也会收到此错误,请帮助我..

这是它的java代码。

public class Share extends CordovaPlugin {

private FileOutputStream outStream; 
private File file;
Bitmap bm;
public static final String ACTION_POSITION = "ShareImage";
Context context;

public Share(Context context) {
    this.context = context;

}

@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
        throws JSONException {

    if (ACTION_POSITION.equals(action)) {

        try {
            JSONObject arg_object = args.getJSONObject(0);
            Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
            sendIntent.setType("image/jpg");
            String uri = "@drawable/"+arg_object.getString("image")+".jpg";
            int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName());
            bm = BitmapFactory.decodeResource( context.getResources(), imageResource);
            String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
            file = new File(extStorageDirectory+ "/Download/", "imageee.png");

                try {
                outStream = new FileOutputStream(file);
                bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
                outStream.flush();
                outStream.close();
                } catch (FileNotFoundException e) {
                    System.out.println(" praise god........");
                e.printStackTrace();
                } catch (IOException e) {
                e.printStackTrace();
                }
            sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
            sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, arg_object.getString("image"));
            this.cordova.getActivity().startActivity(sendIntent);
            } catch (Exception e) {
                System.err.println("Exception: " + e.getMessage());
                callbackContext.error(e.getMessage());
            return false;
        }

    }
    return true;
    }
  }

Share.js 插件

 var Share = function() {};

Share.prototype.show = function(success, fail, path) {
    return cordova.exec( function(args) {
        success(args);
    }, function(args) {
        fail(args);
    }, 'Share','', 'ShareImage', [{"image": path}]);
};
if(!window.plugins) {
    window.plugins = {};
}
if (!window.plugins.share) {
    window.plugins.share = new Share();
}

config.xml文件中插件的声明

<plugins>
    <plugin name="Share" value="com.picsswipe.Share"/>
</plugins>

日志猫

 11-11 16:02:04.898: W/System.err(15149): java.lang.InstantiationException: com.picsswipe.Share
 11-11 16:02:04.898: W/System.err(15149):   at java.lang.Class.newInstanceImpl(Native Method)
 11-11 16:02:04.898: W/System.err(15149):   at java.lang.Class.newInstance(Class.java:1409)
 11-11 16:02:04.898: W/System.err(15149):   at org.apache.cordova.api.PluginEntry.createPlugin(PluginEntry.java:80)
 11-11 16:02:04.898: W/System.err(15149):   at org.apache.cordova.api.PluginManager.getPlugin(PluginManager.java:249)
 11-11 16:02:04.898: W/System.err(15149):   at org.apache.cordova.api.PluginManager.exec(PluginManager.java:206)
 11-11 16:02:04.898: W/System.err(15149):   at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:51)
 11-11 16:02:04.898: W/System.err(15149):   at android.webkit.WebViewCore.nativeHandleTouchEvent(Native Method)
 11-11 16:02:04.898: W/System.err(15149):   at android.webkit.WebViewCore.nativeHandleTouchEvent(Native Method)
 11-11 16:02:04.898: W/System.err(15149):   at android.webkit.WebViewCore.access$6200(WebViewCore.java:54)
 11-11 16:02:04.898: W/System.err(15149):   at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1658)
11-11 16:02:04.898: W/System.err(15149):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-11 16:02:04.898: W/System.err(15149):    at android.os.Looper.loop(Looper.java:130)
11-11 16:02:04.898: W/System.err(15149):    at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:685)
 11-11 16:02:04.898: W/System.err(15149):   at java.lang.Thread.run(Thread.java:1019)
 11-11 16:02:04.898: I/System.out(15149): Error adding plugin com.picsswipe.Share.

html文件的onclick函数

instance.addEventHandler(PhotoSwipe.EventTypes.onToolbarTap, function(e){
                    if (e.toolbarAction === PhotoSwipe.Toolbar.ToolbarAction.none){
                            share();
                    }
                });




  function share() {  
        window.plugins.share.show({path: "Image"},
            function(e) {
            alert(e)    }, // Success function
            function() {
                alert("Praise god :( ")
            },// Failure function
            imagename 
        );
    }

【问题讨论】:

  • 您使用的是哪个版本的phonegap,并给出打包代码,Share.java中的导入列表,html函数调用。以便我们轻松找到问题
  • 感谢您的回复,更新了我的问题,我正在使用cordova.2.9 @power_scriptor

标签: javascript android plugins cordova


【解决方案1】:

请进行这些更改。这里我放了你所有的js代码

    var Share = function() {};
Share.prototype.show = function(success, fail, path) {
    return PhoneGap.exec(function(args) {success(args);}, function(args) {fail(args);}, 'Share', 'ShareImage', [{"image": path}]);
};
    PhoneGap.addConstructor(function() {
        PhoneGap.addPlugin("share", new Share());
    });

instance.addEventHandler(PhotoSwipe.EventTypes.onToolbarTap, function (e) {
        if (e.toolbarAction === PhotoSwipe.Toolbar.ToolbarAction.none) {
            share();
        }
    });
    function share() {
        var imagename = ""; // Please give your image name here or page from share() function
        Share.prototype.show({path: "Image"},function (e) {alert(e);},function () {alert("Praise god :( ");},imagename);
    }

config.xml

<feature name="Share">
   <param name="android-package" value="$Share.java file package name$"/>
</feature>

例子:

<feature name="Share">
    <param name="android-package" value="org.apache.cordova.plugin.Share"/>
</feature>

为获得最佳方法,您可以为所有 phonegap 插件创建包名称 package org.apache.cordova.plugin;

我没有检查您的 Share.java 文件。我已经分享了我的工作短信插件代码HERE

如果您有任何问题,请告诉我。

请删除以下代码

public Share(Context context) {
    this.context = context;
}

【讨论】:

  • 感谢您花时间回复我,我应用了上述方法,但它不起作用,我收到此错误“11-11 19:22:50.921: I/Web Console(21576): Failed运行构造函数:TypeError: Object # has no method 'addPlugin' at file:///android_asset/www/js/cordova.js:317 "
  • 现在看看我更新了两次的代码。您是否在 config.xml 文件中更新了 java 包名称。我想知道你做了什么改变以及在哪里
  • 重新排序js代码并移除Share.java文件中的构造函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
相关资源
最近更新 更多