I have this code (I'm useing Visual Studio + Xamarin Android):
KeyMechanism.cs:
using Android.App;
using Android.Content;
using Android.Media;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace myApp
{
class KeyMechanism : Activity
{
private string elementId;
public KeyMechanism(string elementId)
{
this.elementId = elementId;
}
public void ClickHander()
{
int foo = Resources.GetIdentifier(elementId, "id", PackageName);
var myKey = FindViewById( foo );
myKey.Touch += (s, e) =>
{
//Do something
};
}
}
}
myViewAct.cs:
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace myApp
{
public class myViewAct : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.myView1);
int testFoo = Resources.GetIdentifier("button1", "id", PackageName);
KeyMechanism myKey1 = new KeyMechanism("button1");
myKey1.ClickHander();
/*...*/
}
}
}
During compilation there is an error:
Java.Lang.NullPointerException: 'Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference'
in file "KeyMechanism.cs" in line with int foo = Resources.GetIdentifier(elementId, "id", PackageName);
I want to catch the view element not using Resourece.Id.myId
but using a variable. I don't know what's wrong with my code.
I was able to reproduce this error.
Java.Lang.NullPointerException: 'Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference'
The error means that your method is used on a NULL object. Please check the code below.
public class Activity5 : Activity
{
Activity mActivity;
Context context;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.layout5);
int testFoo = Resources.GetIdentifier("button1", "id", PackageName);
mActivity = this;
context = Android.App.Application.Context;
KeyMechanism myKey1 = new KeyMechanism("button1", mActivity, context);
myKey1.ClickHander();
}
}
class KeyMechanism : Activity
{
private string elementId;
private Activity mActivity;
private Context context;
public KeyMechanism(string elementId, Activity mActivity, Context context)
{
this.elementId = elementId;
this.mActivity = mActivity;
this.context = context;
}
public void ClickHander()
{
int foo = mActivity.Resources.GetIdentifier(elementId, "id", context.PackageName);
var myKey = mActivity.FindViewById(foo);
myKey.Touch += (s, e) =>
{
//Do something
Console.WriteLine("-----------------");
};
}
}