我正在尝试使用处理程序在n
秒之后启动一个活动。应用程序在startActivity
调用时崩溃了,所以我将处理程序代码放在应用程序的onCreate
中,它仍然崩溃(这让我觉得错误来自于我没有使用{{1}好吧):
startActivity
奇怪的是,通过使用完全相同的代码但不同的上下文从视图调用此工作:
@Override
public void onCreate(){
String roomName = this.getSettingValue(R.string.PREFERENCES_ROOM_NAME, "");
Room room;
try {
room = this.getRoomWithName(roomName);
} catch (ReservatorException ex) {
Toast err = Toast.makeText(this, ex.getMessage(),
Toast.LENGTH_LONG);
err.show();
return;
}
Intent i = new Intent(this, RoomActivity.class);
i.putExtra("room", room);
this.startActivity(i);
}
我对Android很陌生......所以可能在这个问题中缺少信息,或者我甚至可能会尝试做一些完全愚蠢的事情谁知道呢?
修改
链接到堆栈跟踪:http://pastebin.com/vh2QC3xz
EDIT2
以下是我的代码的处理程序版本(所以我最后要做的是):
Intent i = new Intent(getContext(), RoomActivity.class);
// ...
答案 0 :(得分:1)
好的......我终于解决了我的问题,主要归功于@Drax
显然,您无法从应用程序启动活动......您需要一个活动实例。所以:
public class ReservatorApplication extends Application {
@Override
public void onCreate(){
Intent i = new Intent(this, RoomActivity.class);
this.startActivity(i);
}
}
无效,导致RunTimeException ...
答案 1 :(得分:0)
当您使用“this”在处理程序中启动活动时,会担心崩溃。它将采用处理程序的上下文。当你执行getContext()时,它将采用活动上下文。
答案 2 :(得分:0)
Intent i = new Intent(YourActivityName.this, RoomActivity.class);
或
Intent i = new Intent(getBaseContext(), RoomActivity.class);
答案 3 :(得分:0)
如果没有看到来自logcat的堆栈跟踪,很难回答,但我发现有时你需要在启动Activity之前将应用程序上下文传递给新的Intent。
试试这一行:
Intent i = new Intent(getApplicationContext(), RoomActivity.class);