问题
I am new to Android programming and trying to learn the concepts, of course with the help from my fellow Stackoverflow user.
What i am trying to do: From the Login page, I am trying to fetch the login credentials from a json file located on a server. After parsing the json file and verifying the login credentials, i am starting a new intent to the next page of my app(Home).
Problem: I have successfully done all the networkings operations and parsing on a background thread using AsyncTask, as suggested by stackoverflow users. But, after verifying the login credentials, when i try to start a new intent inside the postExecute method of AsyncTask class, it gives me the following error. Please suggest what is wrong.
Error:
The constructor Intent(LoginActivity.RetreiveDataAsynctask, Class<HomeActivity>) is undefined
Error in line:
Intent intent = new Intent(this,HomeActivity.class);
code:
private class RetreiveDataAsynctask extends AsyncTask<String,Void,JSONObject> {
@Override
protected JSONObject doInBackground(String... loginURL) {
JSONObject obj = getJSONfromURL(loginURL[0]);
return obj;
}
@Override
protected void onPostExecute(JSONObject obj) {
//Do all ur UI related stuff as this will be executing in ui thread
super.onPostExecute(obj);
TextView loginStatus = (TextView) findViewById(R.id.login);
TextView userId = (TextView) findViewById(R.id.userId);
//if login successful, then go to the next page.
try {
loginStatus.setText(obj.getString("LOGIN"));
userId.setText(obj.getString("userId"));
AlertDialog.Builder adb = new AlertDialog.Builder(
LoginActivity.this);
adb.setTitle("Login Service");
adb.setPositiveButton("Ok", null);
if(obj.getString("LOGIN").equalsIgnoreCase("TRUE") && !obj.getString("userId").equalsIgnoreCase("")){
//call next page
adb.setMessage("Login Success...!!");
Intent intent = new Intent(this,HomeActivity.class); **//THIS LINE SHOWS ERROR**
startActivity(intent);
}else{//login unsuccessful
adb.setMessage("Login Failed...!!");
}
adb.show();
} catch (JSONException e) {
Log.e("log_tag", "JSONException "+e.toString());
}
}
@Override
protected void onPreExecute() {
TextView loginStatus = (TextView) findViewById(R.id.login);
TextView userId = (TextView) findViewById(R.id.userId);
loginStatus.setText("Not Fetched");
userId.setText("Not Fetched");
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
Looking for a solution. Thanks in advance.
回答1:
Intent intent = new Intent(this,HomeActivity.class);
In above line, this
refers to AsyncTask's instance, and Intent
use Application or Activity Context as a Constructor argument.
So it should be like,
Intent intent = new Intent(<Your_Calling_Activity_Name.this>,HomeActivity.class);
in your case,
Intent intent = new Intent(LoginActivity.this,HomeActivity.class);
or
Intent intent = new Intent(mContext,HomeActivity.class);
Here mContext
is a Activity Context which is calling AsyncTask
. You can pass this context to AsyncTask's Constructor.
回答2:
try this
Intent intent = new Intent(getApplicationContext(),HomeActivity.class);
startActivity(intent);
回答3:
The problem is here -
Intent intent = new Intent(this,HomeActivity.class);
In the above code - this refers to the AsyncTask class .
Instead you can use LoginActivity.this or the context .
Intent intent = new Intent(LoginActivity.this,HomeActivity.class);
回答4:
Try this
startActivity(new Intent(LoginActivity.this, HomeActivity.class));
来源:https://stackoverflow.com/questions/14869181/android-intent-in-asynctask-class-giving-error