2014-09-24 61 views
0

我有一個自定義的PhoneGap插件,它導入了一個jar文件。 jar文件允許我創建一些@Override函數,我需要使用插件從這些函數中返回一個值。因此我不能簡單地在execute()中調用callbackContext.success(value)來返回我的值。PhoneGap - 從execute()方法返回自定義插件回調值()

我試着在我的@Override函數中調用callbackContext.success(value),但這不起作用。它只是導致應用程序崩潰。

有誰知道如何在@Override函數中傳遞callbackContext中的值嗎?這些功能都在同一個類中。我是否需要開始新的意圖/活動?

插件Java代碼:

package com.cordova.plugin.scan; 

import org.apache.cordova.CallbackContext; 
import org.apache.cordova.CordovaPlugin; 
import org.apache.cordova.PluginResult; 
import org.json.JSONArray; 
import org.json.JSONException; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Message; 
import android.util.Log; 
import android.content.Context; 

import com.phychips.rcp.*; 

public class Scan extends CordovaPlugin implements iRcpEvent2, OnCompletionListener { 

public CallbackContext callbackContext; 

@Override 
public boolean execute (String action, JSONArray args, CallbackContext callbackContext) throws JSONException 
{ 
     try { 
      RcpApi2 rcpAPI = RcpApi2.getInstance(); 
      rcpAPI.setOnRcpEventListener(this); 
      try { 
       boolean t = rcpAPI.open(); 
       setVolumeMax(); 
       if (t = true) { 
        try {     
         boolean k = rcpAPI.startReadTagsWithRssi(maxTags, 
           maxTime, repeatCycle); 
         if (k = true) {  

          return true; 
         } 
        } catch (final Exception e) { 
         e.printStackTrace(); 
        } 
       } else { 
        return false; 
       } 
      } catch (final Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     catch (final Exception e) { 
      e.printStackTrace(); 
     } 
     return false; 
} 

@Override 
public void onTagMemoryReceived(final int[] data) { 
    // TODO Auto-generated method stub 
    try { 
     cordova.getActivity().runOnUiThread(new Runnable() { 
      public void run(){ 
       String dataText = RcpLib.int2str(data); 
       callbackContext.success(dataText); 
      } 
     }); 
    } 
    catch (final Exception e) { 
      e.printStackTrace(); 
    } 
} 
} 

回答

1

的情況下,在你的類想通了這一點有人想知道...

集CallbackContext callbackContext。 在你的exec()函數中設置this.callbackContext。 在@Override函數中使用callbackContext.sendPluginResult(value)。

public class Scan extends CordovaPlugin{ 
    private CallbackContext callbackContext; 

    @Override 
    public boolean execute (String action, JSONArray args, CallbackContext callbackContext) throws JSONException 
    { 
     this.callbackContext = callbackContext; 
    } 

    @Override 
    public void onTagMemoryReceived(final int[] data) { 
     cordova.getActivity().runOnUiThread(new Runnable() { 
      public void run(){ 
       String dataText = RcpLib.int2str(data); 

        PluginResult result = new PluginResult(PluginResult.Status.OK, dataText); 
        result.setKeepCallback(false); 
        callbackContext.sendPluginResult(result); 
      } 
     }); 
    } 
}