0

バーコード スキャナーを使用して、その入力を取得し、別のアクティビティで使用して、URL で開くことを試みています。別のアクティビティではなく、データを返すことができました。これとまったく同じプロジェクトは見たことがありません。それが意図に関係しているのか、文字列をどのように呼び出しているのかはわかりません。2 番目の Java の webview は機能しますが、文字列を取得しません。助けてくれてありがとう!

Scanner.java (正常に動作します)

package com.pangolin.rollin.ts;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Scanner extends Activity {
TextView tvStatus;
TextView tvResult;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scanner);
    Button websku = (Button) findViewById(R.id.btnsku);
    websku.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent myintent = new Intent(Scanner.this, Websku.class);
            startActivity(myintent);
        }
    });

    tvStatus = (TextView) findViewById(R.id.tvStatus);
    tvResult = (TextView) findViewById(R.id.tvResult);

    Button scanBtn = (Button) findViewById(R.id.btnScan);

    // in some trigger function e.g. button press within your code you
    // should add:
    scanBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub

            try {

                Intent intent = new Intent(
                        "com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE,PRODUCT_MODE");
                startActivityForResult(intent, 0);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "ERROR:" + e, Toast.LENGTH_LONG)
                        .show();

            }

        }
    });

}

// In the same activity you’ll need the following to retrieve the results:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {

        if (resultCode == RESULT_OK) {
            tvStatus.setText(intent.getStringExtra("SCAN_RESULT_FORMAT"));
            tvResult.setText(intent.getStringExtra("SCAN_RESULT"));
        } else if (resultCode == RESULT_CANCELED) {
            tvStatus.setText("Press a button to start a scan.");
            tvResult.setText("Scan cancelled.");
        }
    }
}

}

そして websku.java (動作しません。以前のアクティビティから結果を取得するはずです。

package com.pangolin.rollin.ts;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Websku extends Activity {
final Activity activity = this;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    String sku = intent.getStringExtra("SCAN_RESULT");
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    setContentView(R.layout.activity_websku);
    WebView webView = (WebView) findViewById(R.id.webview_sku);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);

            if (progress == 100)
                activity.setTitle(R.string.title_activity_websku);
        }
    });

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            // Handle the error
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });

    webView.loadUrl("http://m.radioshack.com/radioshack/catalog/searchList.do?categoryId=&keyword="+sku);

    };
}
4

2 に答える 2

0

Webskuあなたは意図に余分なものを設定しません:

websku.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        Intent myintent = new Intent(Scanner.this, Websku.class);
        startActivity(myintent);
    }
});

次のようにする必要があります。

websku.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        Intent myintent = new Intent(Scanner.this, Websku.class);
        myintent.putExtra("somename", somevalue);
        startActivity(myintent);
    }
});
于 2013-03-20T22:50:31.113 に答える
0

websku アクティビティのエクストラは設定しません。スキャナーから返されたインテントを保存します。

private Intent mWebskuIntent;
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        mWebskuIntent = intent;
        // more of your code

次に、websku アクティビティを開始するときに、保存されたインテントのコピーを作成します。これにより、スキャナーから返されたエクストラもコピーされます。

Intent myintent = new Intent(mWebskuIntent);
myintent.setClass(Scanner.this, Websku.class);
startActivity(myintent);

また、mWebskuIntent が null であることを確認することもできます。

于 2013-03-20T22:50:55.150 に答える