Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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
使用@JavascriptInterface从webview调用活动_Javascript_Android_Android Studio_Webview_Android Webview - Fatal编程技术网

使用@JavascriptInterface从webview调用活动

使用@JavascriptInterface从webview调用活动,javascript,android,android-studio,webview,android-webview,Javascript,Android,Android Studio,Webview,Android Webview,我被困在我的项目中,请求你的帮助 我试图使用javascript调用,通过单击按钮从MainActivity.java中的webview调用一个活动(BarcodeScannerActivity.java)。我想我把某个地方的参数搞砸了。。。我不确定我在哪里犯了错误,我只是复制和修改了博客和stackoverflow中的代码 我的Android Studio logcat中出现以下错误: [信息:控制台(315)]“未捕获错误:在NPObject上调用方法时出错”,来源:http:// 这是我的

我被困在我的项目中,请求你的帮助
我试图使用javascript调用,通过单击按钮从MainActivity.java中的webview调用一个活动(BarcodeScannerActivity.java)。我想我把某个地方的参数搞砸了。。。我不确定我在哪里犯了错误,我只是复制和修改了博客和stackoverflow中的代码

我的Android Studio logcat中出现以下错误:

[信息:控制台(315)]“未捕获错误:在NPObject上调用方法时出错”,来源:http://

这是我的服务器端html:

 <input type="button" value="Scanner" id="BtnScan" class="btn_dark" onclick="callActivity();" /> 
<script>
  function callActivity() {
    Android.openBarcodeScanner();
  }
</script>
最后是要调用的BarcodeScanneActivity.java:

public class BarcodeScannerActivity extends Activity implements View.OnClickListener {

//    private static final  R = ;
    // use a compound button so either checkbox or switch widgets work.
    private CompoundButton autoFocus;
    private CompoundButton useFlash;
    private TextView statusMessage;
    private TextView barcodeValue;

    private static final int RC_BARCODE_CAPTURE = 9001;
    private static final String TAG = "BarcodeMain";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.barcode_scanner);

        statusMessage = (TextView)findViewById(R.id.status_message);
        barcodeValue = (TextView)findViewById(R.id.barcode_value);

        autoFocus = (CompoundButton) findViewById(R.id.auto_focus);
        useFlash = (CompoundButton) findViewById(R.id.use_flash);

        findViewById(R.id.read_barcode).setOnClickListener(this);
    }

    /**
     * Called when a view has been clicked.
     *
     * @param v The view that was clicked.
     */
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.read_barcode) {
            // launch barcode activity.
            Intent intent = new Intent(this, BarcodeCaptureActivity.class);
            intent.putExtra(BarcodeCaptureActivity.AutoFocus, autoFocus.isChecked());
            intent.putExtra(BarcodeCaptureActivity.UseFlash, useFlash.isChecked());

            startActivityForResult(intent, RC_BARCODE_CAPTURE);
        }

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == RC_BARCODE_CAPTURE) {
            if (resultCode == CommonStatusCodes.SUCCESS) {
                if (data != null) {
                    Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject);
                    statusMessage.setText(R.string.barcode_success);
                    barcodeValue.setText(barcode.displayValue);
                    Log.d(TAG, "Barcode read: " + barcode.displayValue);
                } else {
                    statusMessage.setText(R.string.barcode_failure);
                    Log.d(TAG, "No barcode captured, intent data is null");
                }
            } else {
                statusMessage.setText(String.format(getString(R.string.barcode_error),
                        CommonStatusCodes.getStatusCodeString(resultCode)));
            }
        }
        else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}
最后一个问题是,这个javascript代码在我的情况下也能工作吗? 或者我需要修改一下吗

function  callActivity(){

            if(window.android){

                console.info("android");

                 window.android.openBarcodeScanner(number.value);           

            }

            else{

                console.info("web");

                document.form.submit();

            }

        }

    }

提前非常感谢

您的接口将字符串作为参数:

@JavascriptInterface
public void openBarcodeScanner(String str) {
但您的调用不会传递任何参数:

Android.openBarcodeScanner();

谢谢你的评论@Doug!我想从客户端将扫描的条形码数据(例如:078742353098)传递给按钮。我应该在括号之间写什么参数??是Android.openBarcodeScanner(barcode.displayValue)?当然,您希望从javascript端发送到java端的任何字符串。在任何情况下,您的调用都应该在参数的类型和数量上与定义相匹配。
Android.openBarcodeScanner();