Reputation: 3139
I know that this is common question, but can't find my mistake. I need to pass Activity's Context to the RestClient class, which is non-activity. I do it like this:
public class RestClient {
public void setContextRest(Context ctx)
{
this.context = ctx;
}
public Context getContextRest()
{
return this.context;
}
public RestClient(Context context)
{
this.context = context;
}
}
and in my Activity class :
RestClient helper = new RestClient(LoginActivity.this);
helper.setContextRest(LoginActivity.this);
and this is how I get it in the RestClient:
Intent i = new Intent(context, LoginActivity.class);
i.putExtra("relogin", true);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
and I get
java.lang.NullPointerException
at android.content.ComponentName.<init>(ComponentName.java:75)
at android.content.Intent.<init>(Intent.java:2823)
at com.library.RestClient.Execute(RestClient.java:276)
at com.library.JSONParser.getJSONFromUrl(JSONParser.java:46)
at com.library.UserFunctions.loginUser(UserFunctions.java:76)
at com.assignmentexpert.LoginActivity$LoginTask.doInBackground(LoginActivity.java:318)
at com.assignmentexpert.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
threadid=9: thread exiting with uncaught exception (group=0x40018578)
in the Intent i = new Intent(context, LoginActivity.class);
. The problem is that context
is null on some reason. Tell me please what it is?
Upvotes: 0
Views: 2141
Reputation: 3139
Maybe its contradicts right designing patterns, but I used Singletone for my Activity and it works properly. Like this:
public static Context getInstance(){
if (instance == null)
{
instance = LoginActivity._context;
}
return instance;
}
Upvotes: 0
Reputation: 13415
Create your RestClient in this way:
public class RestClient {
Context context;
public RestClient(Context mcontext) {
context = mcontext;
}
....
....
}
Now, initialize your restclient like this:
RestClient client;
client = new RestClient(getApplicationContext());
It will allow you to access context anywhere in your RestClient class.
Upvotes: 1
Reputation: 3417
Intent i = new Intent(this.context, LoginActivity.class);
it should this.context instead of just context
Upvotes: 0