coolhack7
coolhack7

Reputation: 1234

Run a Slider just after the Splash Screen

My app crashes every time the Splash Screen has slept for 5 seconds and it just won't start my slider.I'd like to add by saying that I've tried using Shared Preferences but the error tends to persist.Any help would be appreciated.The method launchmain2() is basically nothing but calling a blank activity named Main2Activity.I haven't created as many layouts for the slider as I would need but rather just one which gets all its resources accordingly from the Slider class.Here's the full code

MainActivity

    public class MainActivity extends AppCompatActivity {
    ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = findViewById(R.id.welcome_image);
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.transition);
        iv.setAnimation(animation);
        Thread loading = new Thread() {
            public void run() {
                try {
                    sleep(5000);
                    Intent main = new   Intent(getApplicationContext(),Slide_Adapter.class);
                    startActivity(main);
                    finish();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        loading.start();
    }
}

Slide_Adapter

 public class Slide_Adapter extends AppCompatActivity {
    ViewPager pager;
    Slider adapter;
    Preferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_slide__adapter);
        pager = findViewById(R.id.viewpager);
        adapter = new Slider(this);
        pager.setAdapter(adapter);
        preferences = new Preferences(this);
        if(!preferences.First()){
            launchmain2();
            finish();
        }
    }

    private void launchmain2() {
        preferences.FirstTime(false);
        Intent intent = new Intent(Slide_Adapter.this, Main2Activity.class);
        startActivity(intent);
        finish();
    }
}

Slider

 public class Slider extends PagerAdapter {
    private Context context;

    public Slider(Slide_Adapter slide_adapter) {
        this.context = context;
    }

    public int images[] = {R.drawable.add, R.drawable.call, R.drawable.message};
    public String title[] = {"ADD A CONTACT", "MAKE CALLS", "TEXT"};
    public int background[] = {
            Color.rgb(255,0,0),
            Color.rgb(128,255,0),
            Color.rgb(255,0,255)};

    @Override
    public int getCount() {
        return title.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == (RelativeLayout)object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.slides, container, false);
        RelativeLayout relativeLayout = view.findViewById(R.id.relative_layout);
        ImageView imageView = view.findViewById(R.id.image);
        TextView textView = view.findViewById(R.id.description);
        relativeLayout.setBackgroundColor(background[position]);
        imageView.setImageResource(images[position]);
        textView.setText(title[position]);
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((RelativeLayout)object);
    }
}

Preference Class

    public class Preferences {
    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
    Context context;
    private static final String FIRST_LAUNCH = "A";
    int MODE = 0;
    private static final String PREFERENCE = "B";

    public Preferences(Context context) {
        this.context = context;
        sharedPreferences = context.getSharedPreferences(PREFERENCE, MODE);
        editor = sharedPreferences.edit();
    }

    public void FirstTime(boolean first){
        editor.putBoolean(FIRST_LAUNCH, first);
        editor.commit();
    }

    public boolean First(){
        return sharedPreferences.getBoolean(FIRST_LAUNCH, true);
    }
}

Upvotes: 1

Views: 212

Answers (3)

Faysal Ahmed
Faysal Ahmed

Reputation: 7669

This issue arises because of the null context. Update context on Slider Adapter page.

Context update

private Context mContext;

public Slider(Context context) {
    this.mContext = context;
}

And then use the mContext for instantiating the item.

LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Update: For opening another activity for second time opening, change your MainActivity like this.

public class MainActivity extends AppCompatActivity {
ImageView iv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Preferences.init(getApplicationContext());// Also add this 
    iv = findViewById(R.id.welcome_image);
    Animation animation = AnimationUtils.loadAnimation(this, R.anim.transition);
    iv.setAnimation(animation);
    Thread loading = new Thread() {
        public void run() {
            try {
                sleep(5000);
              if(Preferences.getIsFirst() == false){
                 Preferences.writeFirstTimeOpen(true);
                 Intent main = new   Intent(getApplicationContext(),Slide_Adapter.class);
                startActivity(main);
                finish();
                   }else{
               Intent main = new   Intent(getApplicationContext(), Main2Activity.class);
                startActivity(main);
                finish();
            }

            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    loading.start();
}
}

And Preference Class:

public class Preferences {
private static SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
Context context;
private static final String FIRST_LAUNCH = "A";
int MODE = 0;
private static final String PREFERENCE = "B";

public static void init(Context context) {
    if (sharedPreferences == null) {
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    }
}

public static boolean writeFirstTimeOpen(boolean value) {
  SharedPreferences.Editor editor = preferences.edit();

    editor.putBoolean(FIRST_LAUNCH, value);

    return editor.commit();
} 


  public boolean getIsFirst(){
     return sharedPreferences.getBoolean(FIRST_LAUNCH, true);
  }
}

Please check this, as this will also fix another first time opening issue.

Upvotes: 2

Rajesh
Rajesh

Reputation: 2618

I noticed that parameter in constructor of Slider class not define as needed

What you do

public Slider(Slide_Adapter slide_adapter) {//There is not Context in parameter
    this.context = context;//context will be still null 
}

What need to do

public Slider(Context context) {//Add Context in parameter
    this.context = context; 
}

Upvotes: 1

InsaneCat
InsaneCat

Reputation: 2161

You need to modify like this your constructor

public Slider(Context context) {//Add Context in parameter
    this.context = context; 
}

And please go though this link how to set and get value from shared-preferences

Hope this helps you

Upvotes: 1

Related Questions