Java startActivity(intent)不是开始活动
我正在制作一个android应用程序,包含2个活动和一个Java类,该类使用NFC读取/写入RFID数据 我使用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(),但活动实际上并没有开始。应用程序没有崩溃,
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);
}