使用额外的类(android)

时间:2015-07-22 13:54:10

标签: java android android-activity

我找到了一些例子,但它并没有帮助我。我正在为我的手机创建一个应用程序,但我遇到了一个问题。问题是我想在我的新课程中启动一个新的Activity但它不起作用。

下面这个课是我想要开始名为“PhoneStatus”

的新活动的地方
package com.example.phone;

import android.content.Intent;
import android.view.View;
import android.widget.Button;

public class Controller {
    Button ps;
    PhoneStatus c_ps;

    public Controller(Button ps) {
        this.ps = ps;
        c_ps = new PhoneStatus();
        createPhone_status();
    }

    private Boolean createPhone_status() {
        ps.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent it = new Intent("com.example.phone.PhoneStatus");
                c_ps.startActivity(it);
            }
        });
        return true;
    }
}

有人可以帮我开一个新的活动吗?因为这给了我一个错误并且崩溃了应用程序。 Activity1(因此MainActivity)工作正常。

  

错误:    07-22 15:38:35.946:E / AndroidRuntime(30784):java.lang.NullPointerException:尝试调用虚拟方法'android.app.ActivityThread $ ApplicationThread android.app.ActivityThread.getApplicationThread()'on a空对象引用

5 个答案:

答案 0 :(得分:1)

PhoneStatus是一项活动。您应该从不自己实例化Android应用程序组件(如活动)。操作系统的责任是执行此操作,因为操作系统需要执行一些额外的设置,例如将基本上下文附加到活动。因为您使用new PhoneStatus()自己实例化了此设置,所以此设置尚未发生,并且对startActivity()的调用导致在调用堆栈中的某处发生错误。您应该尝试使用活动的最早版本是onCreate()回调。

我认为最简单的解决方案是:

ps.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent it = new Intent("com.example.phone.PhoneStatus");
        ps.getContext().startActivity(it);
    }
});

答案 1 :(得分:1)

一般来说,请使用:

Intent intent = new Intent(this, newActivityName.class);
startActivity(intent);

答案 2 :(得分:1)

你的'Controller'是简单的java类,所以你不会找到任何启​​动actvity的上下文。因此,您需要在“Controller”构造函数中将上下文作为参数传递。

    public Controller(Button ps, Context context) {
            this.ps = ps;
            c_ps = new PhoneStatus();
            createPhone_status();
            this.context = context;
    }

将该上下文存储在该类中并使用该上下文启动活动。

Intent intent = new Intent(context, newActivityName.class);
context.startActivity(intent);

如果PhoneStatus是一个活动,那么@Karakuri是对的,你可以遵循这个建议

快乐的编码......

答案 3 :(得分:0)

您可以使用以下代码

Intent intent = new Intent(LoginActivity.this, AboutActivity.class);
        startActivity(intent);           

LoginActivity - 当前活动名称 AboutActivity - 下一个活动需要去(Phonestatus)

答案 4 :(得分:0)

您在Activity之外呼叫Activity,因此您需要:

    Intent it = new Intent("com.example.phone.PhoneStatus");
    it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //You should start a new task
    ps.getContext().startActivity(it);