我正在尝试使用应用内结算来构建一个简单的Android应用。我正在使用Nexus 7 2013设备运行和调试它。我只是收到错误消息,“不幸的是,您的应用已停止。”我曾尝试记录和插入断点,但它似乎从未到达代码的开头。我正在使用this tutorialthis 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(本机方法)
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):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
10-14 17:30:07.458:E / AndroidRuntime(10207):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-14 17:30:07.458:E / AndroidRuntime(10207):在dalvik.system.NativeStart.main(本机方法)
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):在com.myknitcards.project.MainActivity。(MainActivity.java:24)
10-14 17:30:07.458:E / AndroidRuntime(10207):at java.lang.Class.newInstanceImpl(本机方法)
10-14 17:30:07.458:E / AndroidRuntime(10207):位于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示例,它将在我的平板电脑上运行,所以这不是问题。欢迎任何建议。

最佳答案

从堆栈跟踪列表中的最后一个“ Caused by”开始(这是第一个例外):


  引起原因: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。该文档说它返回“当前窗口,如果活动不可见,则返回null”。

显然,它认为您的主要活动不是“视觉”。您的主要活动是否宣布为服务?

关于java - Android应用内结算应用无法运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26370800/

10-10 11:39