java - Android 应用内结算应用无法运行

标签 java android eclipse

我正在尝试使用应用内结算构建一个简单的 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): 关闭虚拟机 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: 无法实例化 Activity 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):在 java.lang.reflect.Method.invokeNative( native 方法) 10-14 17:30:07.458: E/AndroidRuntime(10207): 在 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( native 方法) 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):在 java.lang.Class.newInstanceImpl( native 方法) 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

我什至不知道从哪里开始。为什么它不能实例化 Activity ?顺便说一句,我已经从 Google 的开发者网站下载了 TrivialDrive 示例,它可以在我的平板电脑上运行,所以这不是问题所在。欢迎提出任何建议。

最佳答案

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

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) 返回“如果找到则返回 View ,否则返回 null”。但它没有返回 null,而是抛出 NPE。

您可以查看 Activity.java:1884 的源代码或设置异常断点以查明它跳过了什么 null。

也许它无法加载所需的布局资源或 list 或其他资源。或者可能缺少资源。

这是 ?? 源代码的链接Activity.java 的版本.它说:

public View findViewById(int id) {
    return getWindow().findViewById(id);
}

因此 getWindow() 必须返回 null。文档说它返回“当前窗口,如果 Activity 不是可视的,则返回 null。”

显然它认为您的主要 Activity 不是“视觉的”。您的主要 Activity 是否声明为服务?

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

相关文章:

java - Android:加载库并仅将其用于开发分支而不是发布

java - 拒绝 j_security_check 上的 GET 方法

Android:如何向全屏 ScrollView 添加页脚?

java - 整理我的 Java 项目

java - 带有选择的基本加法和减法

android - 如何在 Android 应用程序中保存/存储对象的多维列表?

java - Android Jetpack 导航组件太慢。有什么问题?

java - Eclipse : Cannot get a DefaultScreenDevice -> cannot launch any GUI 中的问题

c++ - eclipse 朱诺 CDT : Incompatibility with C++11 and debugging issues

java - 将 Java.util 日期转换为不带时区的 XML 日期