【发布时间】:2014-04-10 02:47:39
【问题描述】:
我打算使用 ZXING 库在我的 Android 应用程序中提供二维码功能。我能够让它工作,但它会引发异常。我正在使用库 github 链接提供的示例代码。谁能告诉我是什么导致了异常?
链接到IntentIntegrator 和IntentResult 类。
MainActivity 的示例代码(使用 eclipse 生成初始代码):
package com.example.testapp;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.google.zxing.integration.android.IntentIntegrator;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
IntentIntegrator integrator = new IntentIntegrator(
MainActivity.this);
AlertDialog d = integrator.shareText("sample text here");
d.show();
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e));
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
来自 LogCat 的异常:
04-09 13:08:13.923: E/MainActivity(27574): java.lang.NullPointerException
04-09 13:08:13.923: E/MainActivity(27574): at com.example.testapp.MainActivity$1.onClick(MainActivity.java:38)
04-09 13:08:13.923: E/MainActivity(27574): at android.view.View.performClick(View.java:4633)
04-09 13:08:13.923: E/MainActivity(27574): at android.view.View$PerformClick.run(View.java:19330)
04-09 13:08:13.923: E/MainActivity(27574): at android.os.Handler.handleCallback(Handler.java:733)
04-09 13:08:13.923: E/MainActivity(27574): at android.os.Handler.dispatchMessage(Handler.java:95)
04-09 13:08:13.923: E/MainActivity(27574): at android.os.Looper.loop(Looper.java:157)
04-09 13:08:13.923: E/MainActivity(27574): at android.app.ActivityThread.main(ActivityThread.java:5356)
04-09 13:08:13.923: E/MainActivity(27574): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 13:08:13.923: E/MainActivity(27574): at java.lang.reflect.Method.invoke(Method.java:515)
04-09 13:08:13.923: E/MainActivity(27574): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
04-09 13:08:13.923: E/MainActivity(27574): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
04-09 13:08:13.923: E/MainActivity(27574): at dalvik.system.NativeStart.main(Native Method)
04-09 13:08:13.933: D/AbsListView(27574): unregisterIRListener() is called
04-09 13:08:14.518: D/AbsListView(27574): onVisibilityChanged() is called, visibility : 4
04-09 13:08:14.518: D/AbsListView(27574): unregisterIRListener() is called
提前致谢。
解决方案:
感谢大家的帮助。
正如 Tanis.7x 在下面指出的,我的错误在于 d.show() 行。
我正在尝试按照我的理解写出问题的根源,如果错了,请纠正我。
方法shareText()当且仅当它找不到包“com.google.zxing.client.android”时返回一个对话框。
该对话框应用于提示用户从 Playstore 安装应用程序“条形码阅读器”。
由于我已经有了包(通过在我的项目中包含 jar 文件),该方法返回 null,我在调用该方法时犯了(愚蠢的)错误。
【问题讨论】:
-
发布
activity_main.xml布局。 -
第 38 行是哪一行?
-
确实,真正的第 38 行是什么是一个谜,因为您发布的代码和堆栈跟踪不匹配。
-
第 38 行是 d.show();。无论如何,现在问题已经解决了。显然,在我阅读文档和示例代码数小时后让它工作后,我忽略了一个基本说明。该对话框为空,因为我已在我的应用程序中安装了库(shareText 方法返回一个对话框,要求用户安装条形码阅读器,以防它不可用,否则为空)。