This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Unable to call the MainActivity of Android-nRF-Mesh-Library from my Activity in Android for my version of nRF Mesh Provisioner app

I have some working knowledge of Android but I'm new to Fragments, Injection, Binding, ButterKnife .etc. I have gone through some videos and tutorials but can't catch where the problem is.

What I want to do:

There is this activity and Code (MeshInteractionActivity.java) which I've got from a GitHub repository. I want to make another activity which is MainActivity.java and connect to this Mesh Activity on button press. I thought it would be just straightforward to do an Intent from MainActivity to MeshInteractionActivity. But it didn't work. I felt maybe it needs a fragment on MainActivity which Intents to 2nd Activity and so I created MainFragment.java. I get the 2 buttons on my MainFragment but when I press Mesh button i.e. mesh() method in MainFragment I get an app crash.

I tried learning ButterKnife and seeing some videos but they were too basic and I didn't understand how they will fit into my use case. Since my code has a section like this:

Fullscreen
1
2
3
4
5
@Inject
DispatchingAndroidInjector<Fragment> mDispatchingAndroidInjector;
@Inject
ViewModelProvider.Factory mViewModelFactory;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Things which I've still not got the meaning of.

The error I get:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mrinq.mesh_ha_v01/com.mrinq.mesh_ha_v01.MeshInteractionActivity}: java.lang.IllegalArgumentException: No injector factory bound for Class<com.mrinq.mesh_ha_v01.MeshInteractionActivity>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<com.mrinq.mesh_ha_v01.MeshInteractionActivity>
at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:106)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:61)
at com.mrinq.mesh_ha_v01.di.AppInjector.handleActivity(AppInjector.java:88)
at com.mrinq.mesh_ha_v01.di.AppInjector.access$000(AppInjector.java:39)
at com.mrinq.mesh_ha_v01.di.AppInjector$1.onActivityCreated(AppInjector.java:51)
at android.app.Application.dispatchActivityCreated(Application.java:195)
at android.app.Activity.onCreate(Activity.java:926)
at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:321)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

My source Activity is MainActivity.java:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MainActivity extends AppCompatActivity implements Injectable,
HasSupportFragmentInjector,
BottomNavigationView.OnNavigationItemSelectedListener,
BottomNavigationView.OnNavigationItemReselectedListener,
ScannerFragment.ScannerFragmentListener, FragmentManager.OnBackStackChangedListener,
NetworkFragment.NetworkFragmentListener,
MainFragment.MainFragmentListener,
DialogFragmentResetNetwork.DialogFragmentResetNetworkListener {
private static final String TAG = MainActivity.class.getSimpleName();
private static final String CURRENT_FRAGMENT = "CURRENT_FRAGMENT";
@Inject
DispatchingAndroidInjector<Fragment> mDispatchingAndroidInjector;
@Inject
ViewModelProvider.Factory mViewModelFactory;
@BindView(R.id.state_scanning)
View mScanningView;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

My source fragment which is inflated by MainActivity is MainFragment.java:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link MainFragment.OnFragmentInteractionListener} interface
* to handle interaction events.
* Use the {@link MainFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class MainFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
/*private OnFragmentInteractionListener mListener;*/
private MainFragmentListener mMainFragmentListener;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

My destination Activity to which an Intent in my fragment of MainActivity jumps to is MeshInteractionActivity:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MeshInteractionActivity extends AppCompatActivity implements Injectable, HasSupportFragmentInjector, BottomNavigationView.OnNavigationItemSelectedListener,
BottomNavigationView.OnNavigationItemReselectedListener,
ScannerFragment.ScannerFragmentListener, FragmentManager.OnBackStackChangedListener,
NetworkFragment.NetworkFragmentListener,
DialogFragmentResetNetwork.DialogFragmentResetNetworkListener {
private static final String TAG = MeshInteractionActivity.class.getSimpleName();
private static final String CURRENT_FRAGMENT = "CURRENT_FRAGMENT";
@Inject
DispatchingAndroidInjector<Fragment> mDispatchingAndroidInjector;
@Inject
ViewModelProvider.Factory mViewModelFactory;
@BindView(R.id.state_scanning)
View mScanningView;
private SharedViewModel mViewModel;
private BottomNavigationView mBottomNavigationView;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

This activity too, has its own fragments but I guess the problem is where the Intent from 1st Activity fragment jumps to 2nd Activity.

Thanks in advance.