I am new to Android Development and I am trying to implement a simple Image Slider to view some images using ViewPager. I found this code in some website and am trying to install and run on both simulator and my android phone but after compiling and installing the app it does not open (in fact i kept getting the message 'app keeps stopping'). I am so new to android that I do not even know how to debug this. Can someone please help? This is the error I am getting after making changes to the androidx and necessary gradle dependency as some people mentioned:
2019-09-05 11:02:05.645 2886-24531/? W/ActivityManager: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10200000 cmp=com.example.test.imageslider/.MainActivity launchParam=MultiScreenLaunchParams { mDisplayId=0 mBaseDisplayId=0 mFlags=0 } (has extras) } from ProcessRecord{668012 22868:com.google.android.googlequicksearchbox:search/u0a58} (pid=22868, uid=10058) not exported from uid 10088
2019-09-05 11:02:05.649 22868-22868/? E/ContextIntentStarter: Cannot start activity: Intent { act=android.intent.action.MAIN flg=0x10200000 cmp=com.example.test.imageslider/.MainActivity launchParam=MultiScreenLaunchParams { mDisplayId=0 mBaseDisplayId=0 mFlags=0 } (has extras) }
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10200000 cmp=com.example.test.imageslider/.MainActivity launchParam=MultiScreenLaunchParams { mDisplayId=0 mBaseDisplayId=0 mFlags=0 } (has extras) } from ProcessRecord{668012 22868:com.google.android.googlequicksearchbox:search/u0a58} (pid=22868, uid=10058) not exported from uid 10088
at android.os.Parcel.readException(Parcel.java:1701)
at android.os.Parcel.readException(Parcel.java:1654)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3564)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1526)
at android.app.Activity.startActivityForResult(Activity.java:4403)
at android.support.v4.app.w.startActivityForResult(SourceFile:132)
at com.google.android.libraries.ac.c.b.a.startActivityForResult(SourceFile:54)
at android.app.Activity.startActivityForResult(Activity.java:4362)
at android.support.v4.app.w.startActivityForResult(SourceFile:129)
at com.google.android.libraries.ac.c.b.a.startActivityForResult(SourceFile:51)
at android.app.Activity.startActivity(Activity.java:4686)
at com.google.android.libraries.ac.c.b.a.startActivity(SourceFile:45)
at com.google.android.apps.gsa.shared.util.r.d.run(Unknown Source)
at com.google.android.apps.gsa.shared.util.debug.b.b.a(SourceFile:2)
at com.google.android.apps.gsa.shared.util.r.a.a(SourceFile:19)
at com.google.android.apps.gsa.shared.util.r.b.a(SourceFile:8)
at com.google.android.apps.gsa.search.shared.overlay.a.o.a(SourceFile:29)
at com.google.android.apps.gsa.search.shared.service.w.a_(SourceFile:77)
at com.google.android.apps.gsa.search.shared.service.ag.run(Unknown Source)
at com.google.android.apps.gsa.shared.util.c.a.ci.a(SourceFile:2)
at com.google.android.apps.gsa.shared.util.c.a.ch.run(SourceFile:5)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
For some reason there is still a line for android.support.v4!
Here is my MainActivity.java
package com.example.test.imageslider;
import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this);
viewPager.setAdapter(viewPagerAdapter);
}
}
ViewPagerAdapter.java
package com.example.test.imageslider;
import android.content.Context;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.view.LayoutInflater;
public class ViewPagerAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
private Integer [] images = {R.drawable.image1,R.drawable.image2,R.drawable.image3};
public ViewPagerAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.custom_layout, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
imageView.setImageResource(images[position]);
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ViewPager vp = (ViewPager) container;
View view = (View) object;
vp.removeView(view);
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test.imageslider" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name="com.example.test.imageslider.MainActivity"></activity>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.test.imageslider.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="190dp"
android:layout_marginBottom="8dp"/>
</RelativeLayout>
custom_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:id="@+id/imageView" />
</LinearLayout>