Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android活动中使用外部类 我想在我开始着手一个项目之前实践我所认为的Android开发的基本原理。我目前有一个ChipCount类,负责保存和加载玩家将拥有的芯片数量。该课程还将负责跟踪芯片的数量_Java_Android - Fatal编程技术网

Java 在android活动中使用外部类 我想在我开始着手一个项目之前实践我所认为的Android开发的基本原理。我目前有一个ChipCount类,负责保存和加载玩家将拥有的芯片数量。该课程还将负责跟踪芯片的数量

Java 在android活动中使用外部类 我想在我开始着手一个项目之前实践我所认为的Android开发的基本原理。我目前有一个ChipCount类,负责保存和加载玩家将拥有的芯片数量。该课程还将负责跟踪芯片的数量,java,android,Java,Android,我的ChipCount类当前看起来如下所示: package com.example.parceltest; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import android.content.Context; public class ChipCount { private int number_of_chips; Cont

我的
ChipCount
类当前看起来如下所示:

package com.example.parceltest;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;

public class ChipCount {

    private int number_of_chips;
    Context file_context;

    public ChipCount() {
        loadChips();
    }

    public void setChips(int chips) {
        this.number_of_chips = chips;
    }

    public int getChips() {
        return number_of_chips;
    }

    public void saveChips() {
        String filename = "chipsave";
        String save_string = String.valueOf(number_of_chips);

        try {
            FileOutputStream output = file_context.getApplicationContext().openFileOutput(filename, Context.MODE_PRIVATE);
            output.write(save_string.getBytes());
            output.close();
        } catch(IOException e) {

        }

    }

    public void loadChips() {
        String filename = "chipsave";
        String chip_count = "";

        try {
            FileInputStream input = file_context.getApplicationContext().openFileInput(filename);
            input.read(chip_count.getBytes());
        } catch(IOException e) {
            this.setChips(500);
        }
    }

}
我还有
main活动
,它试图利用
ChipCount
,但它崩溃了

package com.example.parceltest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    ChipCount chips = new ChipCount();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView number_of_chips = (TextView) findViewById(R.id.number_of_chips);
        int chip = chips.getChips();
        //number_of_chips.setText("500");
    }

}
通过注释不同的行,我已经确定问题出在
int chip=chips.getChips()行

为什么这会使程序崩溃,我怎么可能修复它

这是日志:

10-01 22:51:06.958: I/Process(28051): Sending signal. PID: 28051 SIG: 9
10-01 22:51:26.669: D/AndroidRuntime(28106): Shutting down VM
10-01 22:51:26.669: W/dalvikvm(28106): threadid=1: thread exiting with uncaught exception (group=0x40b7c300)
10-01 22:51:26.669: E/AndroidRuntime(28106): FATAL EXCEPTION: main
10-01 22:51:26.669: E/AndroidRuntime(28106): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.parceltest/com.example.parceltest.MainActivity}: java.lang.NullPointerException
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.os.Looper.loop(Looper.java:137)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.ActivityThread.main(ActivityThread.java:4745)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at java.lang.reflect.Method.invokeNative(Native Method)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at java.lang.reflect.Method.invoke(Method.java:511)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at dalvik.system.NativeStart.main(Native Method)
10-01 22:51:26.669: E/AndroidRuntime(28106): Caused by: java.lang.NullPointerException
10-01 22:51:26.669: E/AndroidRuntime(28106):    at com.example.parceltest.ChipCount.loadChips(ChipCount.java:45)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at com.example.parceltest.ChipCount.<init>(ChipCount.java:15)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at com.example.parceltest.MainActivity.<init>(MainActivity.java:9)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at java.lang.Class.newInstanceImpl(Native Method)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at java.lang.Class.newInstance(Class.java:1319)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
10-01 22:51:26.669: E/AndroidRuntime(28106):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
10-01 22:51:26.669: E/AndroidRuntime(28106):    ... 11 more
10-01 22:51:06.958:I/进程(28051):发送信号。PID:28051信号:9
10-01 22:51:26.669:D/AndroidRuntime(28106):关闭虚拟机
10-01 22:51:26.669:W/dalvikvm(28106):threadid=1:线程退出,但出现未捕获异常(组=0x40b7c300)
10-01 22:51:26.669:E/AndroidRuntime(28106):致命异常:main
10-01 22:51:26.669:E/AndroidRuntime(28106):java.lang.RuntimeException:无法实例化活动组件信息{com.example.parceltest/com.example.parceltest.MainActivity}:java.lang.NullPointerException
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.app.ActivityThread.access$600(ActivityThread.java:130)
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于android.os.Handler.dispatchMessage(Handler.java:99)
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.os.Looper.loop(Looper.java:137)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于android.app.ActivityThread.main(ActivityThread.java:4745)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于java.lang.reflect.Method.Invokenactive(本机方法)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于java.lang.reflect.Method.invoke(Method.java:511)
10-01 22:51:26.669:E/AndroidRuntime(28106):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-01 22:51:26.669:E/AndroidRuntime(28106):在dalvik.system.NativeStart.main(本机方法)
10-01 22:51:26.669:E/AndroidRuntime(28106):由以下原因引起:java.lang.NullPointerException
10-01 22:51:26.669:E/AndroidRuntime(28106):在com.example.parceltest.ChipCount.loadChips(ChipCount.java:45)
10-01 22:51:26.669:E/AndroidRuntime(28106):在com.example.parceltest.ChipCount.(ChipCount.java:15)
10-01 22:51:26.669:E/AndroidRuntime(28106):在com.example.parceltest.MainActivity。(MainActivity.java:9)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于java.lang.Class.newInstanceImpl(本机方法)
10-01 22:51:26.669:E/AndroidRuntime(28106):位于java.lang.Class.newInstance(Class.java:1319)
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.app.Instrumentation.newActivity(Instrumentation.java:1053)上
10-01 22:51:26.669:E/AndroidRuntime(28106):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
10-01 22:51:26.669:E/AndroidRuntime(28106):。。。还有11个

您从未初始化过
芯片计数芯片
,因此调用时为null,并引发
NullPointerException


您需要像
ChipCount chips=new ChipCount()在您的代码中。

您从未初始化
芯片。因此它是
null
,因此您无法访问它的方法

而不是
ChipCount芯片,尝试:
ChipCount chips=new ChipCount()

注意:另外,将来发生崩溃时,请发布LogCat错误。在本例中,这是一个相对简单的修复,但这些日志在将来可能是必需的

编辑

此外,您永远不会将
ChipCount
对象传递给
file\u context
参数。当您在
loadChips()中调用
file\u context时,它会使
file\u context
null

试试这个:

public class MainActivity extends Activity {

    ChipCount chips; // Don't initialize here, on second thought

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chips = new ChipCount(this); // Initialize here; and pass it `this`, which is an Activity, and also a Context

        TextView number_of_chips = (TextView) findViewById(R.id.number_of_chips);
        int chip = chips.getChips();
        //number_of_chips.setText("500");
    }

}

然后,在
ChipCount
的构造函数中,接受
Context
参数,然后执行
file\u Context=newContext

即使更改了该行,应用程序在启动时仍然强制关闭。它不应该关闭。如果是,则是另一个错误代码。是否要用编辑后的代码和LogCat输出编辑您的第一篇文章?@lafferjm我已更新了我的答案,以解决您发布的日志。感谢您解决了此问题。请尝试双击“原因:…”行后的第一行,它将带您到导致您NPE的行。