我尝试使用In-App Billing构建一个简单的Android应用。我正在使用Nexus 7 2013设备来运行和调试它。我刚刚收到错误消息,"很遗憾,您的应用已停止。"我已经尝试过记录和插入断点,但它似乎从未出现过代码的开头。我使用this tutorial和this one,并且只开始使用它们。我的代码:
package com.myknitcards.project;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.myknitcards.project.util.IabHelper;
import com.myknitcards.project.util.IabResult;
import com.myknitcards.project.util.Inventory;
import com.myknitcards.project.util.Purchase;
public class MainActivity extends Activity {
private Button clickButton = (Button)findViewById(R.id.clickButton);
private Button buyButton = (Button)findViewById(R.id.buyButton);
private static final String TAG = "com.myknitcards.project";
IabHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clickButton.setEnabled(false);
String base64EncodedPublicKey =
"mykeyhere";
mHelper = new IabHelper(this, base64EncodedPublicKey);
mHelper.startSetup(new
IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result)
{
if (!result.isSuccess()) {
Log.d(TAG, "In-app Billing setup failed: " +
result);
} else {
Log.d(TAG, "In-app Billing is set up OK");
}
}
});
}
public void buttonClicked(View view) {
clickButton.setEnabled(false);
buyButton.setEnabled(true);
}
}
我的LogCat读取:
10-14 17:30:07.458:D / AndroidRuntime(10207):关闭VM 10-14 17:30:07.458:W / dalvikvm(10207):threadid = 1:线程退出,未捕获异常(group = 0x41be2ba8) 10-14 17:30:07.458:E / AndroidRuntime(10207):致命异常:主要 10-14 17:30:07.458:E / AndroidRuntime(10207):进程:com.myknitcards.project,PID:10207 10-14 17:30:07.458:E / AndroidRuntime(10207):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.myknitcards.project / com.myknitcards.project.MainActivity}:java.lang.NullPointerException 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.os.Handler.dispatchMessage(Handler.java:102) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.os.Looper.loop(Looper.java:136) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.ActivityThread.main(ActivityThread.java:5001) 10-14 17:30:07.458:E / AndroidRuntime(10207):at java.lang.reflect.Method.invokeNative(Native Method) 10-14 17:30:07.458:E / AndroidRuntime(10207):at java.lang.reflect.Method.invoke(Method.java:515) 10-14 17:30:07.458:E / AndroidRuntime(10207):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785) 10-14 17:30:07.458:E / AndroidRuntime(10207):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 10-14 17:30:07.458:E / AndroidRuntime(10207):at dalvik.system.NativeStart.main(Native Method) 10-14 17:30:07.458:E / AndroidRuntime(10207):引起:java.lang.NullPointerException 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.Activity.findViewById(Activity.java:1884) 10-14 17:30:07.458:E / AndroidRuntime(10207):at com.myknitcards.project.MainActivity。(MainActivity.java:24) 10-14 17:30:07.458:E / AndroidRuntime(10207):at java.lang.Class.newInstanceImpl(Native Method) 10-14 17:30:07.458:E / AndroidRuntime(10207):at java.lang.Class.newInstance(Class.java:1208) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.Instrumentation.newActivity(Instrumentation.java:1061) 10-14 17:30:07.458:E / AndroidRuntime(10207):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101) 10-14 17:30:07.458:E / AndroidRuntime(10207):... 11更多 10-14 17:30:10.701:I / Process(10207):发送信号。 PID:10207 SIG:9
我不知道从哪里开始。为什么它无法实例化活动?顺便说一句,我已经从Google的开发者网站下载了TrivialDrive示例,它将在我的平板电脑上运行,因此不是问题。欢迎任何建议。
答案 0 :(得分:1)
从堆栈跟踪列表中的最后一个“引发者”开始(这是第一个例外):
引起:java.lang.NullPointerException 10-14 17:30:07.458:E / AndroidRuntime(10207):at android.app.Activity.findViewById(Activity.java:1884)
文档说findViewById(int id)
返回“如果找到视图,则返回null”。但它没有返回null,它正在抛出NPE。
你可以查看Activity.java:1884的源代码,或者设置一个异常断点来找出它绊倒的null。
可能无法加载所需的布局资源或清单或其他资源。或者可能缺少资源。
这是一个链接到源代码的??版本Activity.java。它说:
public View findViewById(int id) {
return getWindow().findViewById(id);
}
因此getWindow()
必须返回null
。 doc说它返回“当前窗口,如果活动不是可视的,则返回null。”
显然它认为你的主要活动不是“视觉”。您的主要活动是否已宣布为服务?