我正在处理一个包含SplashScreen.java
我的第一个活动的应用。之后它的节目LoginActivity.java
用于登录。我的LoginActivity.java
班最终开始SplashActivity.java
。我希望每次登录后第一次启动我的应用SplashScreen.java
来电SplashActivity.java
而不是LoginActivity.java
。为此,我在我的SplashScreen.java
课程中做了一些更改,但它没有正常工作。
SplashScreen.java类 -
public class SplashScreen extends Activity
{
private long splashDelay = 5000; //5 seconds
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
if(pref.getBoolean("activity_executed", false))
{
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
finish();
}
else
{
Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
}
TimerTask task = new TimerTask()
{
@Override
public void run() {
finish();
Intent mainIntent = new Intent().setClass(SplashScreen.this, LoginActivity.class);
startActivity(mainIntent);
}
};
Timer timer = new Timer();
timer.schedule(task, splashDelay);
}
}
其他人帮助我。现在是第一次运行后唯一的问题。应用从SplashActivity
开始,而不是从SplashScreen
开始。
答案 0 :(得分:2)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
Editor ed = pref.edit();
Boolean Exist=pref.getBoolean("activity_executed", false);// Check is user logged in or not
if(Exist)// if allready logged in then forward it to Splash Activity
{
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
finish();
}
else // Not logged in
{
Handler handler = new Handler();
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 2000L);
}
Runnable runnable = new Runnable() {
public void run() {
new AsyncParsing().execute();
}
};
private class AsyncParsing extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
Log.d("Splash Activity", "In pre execute");
}
@Override
protected Void doInBackground(Void... params) {
Log.d("Splash Activity", "In do in backgriund ");
return null;
}
@Override
protected void onPostExecute(Void result) {
Log.d("Splash Activity", "In post execute");
Intent intent = new Intent(SplashScreen.this, LoginActivity.class);
startActivity(intent);
finish();
}
}
}
答案 1 :(得分:2)
步骤1:在您的登录类
中声明此信息
SharedPreferences pref;
SharedPreferences.Editor editor;
第2步:声明onCrete方法
pref = getSharedPreferences("login", MODE_PRIVATE);
editor = pref.edit();
步骤3:点击登录页面中的提交按钮,粘贴下面的行 :
String check=pref.getString("selected", "nil")
if(check.equals("TRUE"))
{
Intent intent=new Intent(this,splash.class);
startActivity(intent);
}
步骤4:当用户凭证和数据库凭据匹配时,将其放在获取成功消息的位置。
editor.putString("selected", "TRUE");
editor.commit();
答案 2 :(得分:1)
@John检查,并参考这个工作代码,我希望,它可以帮助你,
setContentView(R.layout.main);
pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
Log.v("","onCreate is calling");
if(pref.getBoolean("activity_executed", false))
{
Log.v("","Before if called");
setContentView(R.layout.menu_frame);
Log.v("","after if called");
new Handler().postDelayed(csRunnable1, 3000);
}
else
{
new Handler().postDelayed(csRunnable2, 3000);
Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
}
}
Runnable csRunnable1=new Runnable()
{
@Override
public void run()
{
Intent intent = new Intent(SplashScreen.this, SplashActivity.class);
startActivity(intent);
finish();
}
};
Runnable csRunnable2=new Runnable()
{
@Override
public void run()
{
Intent intent = new Intent(SplashScreen.this, LoginActivity.class);
startActivity(intent);
finish();
}
};
答案 3 :(得分:0)
我认为那里存在逻辑问题。如果没有执行,则运行它并标记为已执行。
if(!pref.getBoolean("activity_executed", false)) {
Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
finish();
}
答案 4 :(得分:0)
问题是调用finish并不会阻止onCreate的其余部分被执行。您需要在以下后面添加一个return语句:
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
finish();
答案 5 :(得分:0)
// try this
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
if(pref.getBoolean("activity_executed", false))
{
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
finish();
}
else
{
Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
Timer timer = new Timer();
TimerTask task = new TimerTask()
{
@Override
public void run() {
timer.cancel();
Intent mainIntent = new Intent().setClass(SplashScreen.this, LoginActivity.class);
startActivity(mainIntent);
finish();
}
};
timer.schedule(task, splashDelay);
}
}
答案 6 :(得分:0)
你错过了我希望它会解决你的问题
public class SplashScreen extends Activity
{private long splashDelay = 5000; // 5 seconds
/** Called when the activity is first created. */
TimerTask task = new TimerTask() {
@Override
public void run() {
finish();
Intent mainIntent = new Intent().setClass(Test.this,
LoginActivity.class);
startActivity(mainIntent);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
SharedPreferences pref = getSharedPreferences("ActivityPREF",
Context.MODE_PRIVATE);
if (pref.getBoolean("activity_executed", false)) {
Intent intent = new Intent(this, SplashActivity.class);
startActivity(intent);
finish();
} else {
Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
Timer timer = new Timer();
timer.schedule(task, splashDelay);
}
}
}