Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 startActivity(intent)不是开始活动_Java_Android_Android Intent_Android Activity_Start Activity - Fatal编程技术网

Java startActivity(intent)不是开始活动

Java startActivity(intent)不是开始活动,java,android,android-intent,android-activity,start-activity,Java,Android,Android Intent,Android Activity,Start Activity,我正在制作一个android应用程序,包含2个活动和一个Java类,该类使用NFC读取/写入RFID数据 我使用enableReaderMode()方法在mainActivity中启用读写器模式,然后在单独的java类中调用onTagDiscovered。进入onTagDiscovered方法后,我将调用main activity.startNewActivity()打开第二个活动。我知道由于一条日志消息,我正在到达startNewActivity(),但活动实际上并没有开始。应用程序没有崩溃,

我正在制作一个android应用程序,包含2个活动和一个Java类,该类使用NFC读取/写入RFID数据

我使用
enableReaderMode()
方法在
mainActivity
中启用读写器模式,然后在单独的java类中调用
onTagDiscovered
。进入
onTagDiscovered
方法后,我将调用
main activity.startNewActivity()
打开第二个活动。我知道由于一条日志消息,我正在到达
startNewActivity()
,但活动实际上并没有开始。应用程序没有崩溃,我没有收到任何错误,只是没有启动。我尝试过在
main活动中放置一个按钮,然后以这种方式打开,效果很好。当我从encode.java调用该方法时,它就是不起作用

**我知道没有必要从Encode.java打开活动,我可以直接将其编码到MainActivity中,但我准备做一些更复杂的事情,需要从Encode.java打开,我想测试活动是否会打开

这是密码

Encode.java

public class Encode implements NfcAdapter.ReaderCallback {
    MainActivity mainActivity = new MainActivity(); 

    public void onTagDiscovered(Tag tag) {
        Log.i(TAG, "New tag discovered"); 
        mainActivity.startNewActivity(); 
    }
public void onTagDiscovered(Tag tag) {
        Log.i(TAG, "New Tag Discovered");
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
           @Override
            public void run() {
               mainActivity.startNewActivity();
           }
        });
}
主要活动

 public void startNewActivity() {
    Log.v(TAG, "in startNewActivity");
    Intent intent = new Intent(this, Success.class);
    startActivity(intent);
}
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.project" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.NFC"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/xband"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                android:resource="@xml/nfc_tech" />

        </activity>
        <activity android:name=".Success" >

        </activity>
    </application>

</manifest>
我尝试添加以下代码,然后收到此错误消息: Encode.java

public class Encode implements NfcAdapter.ReaderCallback {
    MainActivity mainActivity = new MainActivity(); 

    public void onTagDiscovered(Tag tag) {
        Log.i(TAG, "New tag discovered"); 
        mainActivity.startNewActivity(); 
    }
public void onTagDiscovered(Tag tag) {
        Log.i(TAG, "New Tag Discovered");
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
           @Override
            public void run() {
               mainActivity.startNewActivity();
           }
        });
}

而不是:
Intent Intent=newintent(这是Success.class)
Try:
Intent Intent=newintent(getApplicationContext(),Success.class)


这对我有一次是有效的,因为它“返回当前进程的单个全局应用程序对象的上下文。”

工作人员能够帮助我解决这个问题。 这不起作用,因为我正在
Encode
中创建
MainActivity
的新实例,而不是引用现有的
MainActivity

MainActivity
中,我们添加了:

private static MainActivity _instance = null; 

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            encode = new Encode();

            enableReaderMode();

           MainActivity._instance = this;
        }

        public static MainActivity getInstance() {
            return _instance;
        }
Encode
中,我们调用了
startNewActivity
方法:

public void onTagDiscovered(Tag tag) {
    Log.i(TAG, "New Tag Discovered");

    MainActivity.getInstance().startNewActivity();

});

因此,现在
Encode
正在使用MainActivity的现有实例

是否有任何理由称之为
MainActivity.startNewActivity()startNewActivity2()
?用于取出2。这不是真正的代码。谢谢在最坏的情况下,请尝试以下代码:
Handler=new Handler(Looper.getMainLooper());handler.post(new Runnable(){public void run(){main activity.startNewActivity();});
在startNewActivity方法中尝试以下操作:Intent Intent=new Intent(main activity.this,Success.class);@zkminsck似乎也无法修复它。
 public void startNewActivity() {
    Log.v(TAG, "in startNewActivity");
    Intent intent = new Intent(this, Success.class);
    startActivity(intent);
}