AsinteTask类中的Android Intent给出了错误

时间:2013-02-14 06:42:59

标签: android android-intent android-asynctask

我是Android编程新手并尝试学习这些概念,当然还有我的Stackoverflow用户的帮助。

我想做什么:在“登录”页面中,我尝试从位于服务器上的json文件中获取登录凭据。解析json文件并验证登录凭据后,我开始对我的应用程序的下一页(Home)启用新意图。

问题:我已成功完成所有网络操作并使用AsyncTask在后台线程上进行解析,如stackoverflow用户所建议的那样。但是,在验证登录凭据后,当我尝试在AsyncTask类的postExecute方法中启动新的intent时,它会给我以下错误。请说明出了什么问题。

错误

The constructor Intent(LoginActivity.RetreiveDataAsynctask, Class<HomeActivity>) is undefined

行中出错:

Intent intent = new Intent(this,HomeActivity.class);

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) {


        }
    }

寻找解决方案。提前谢谢。

4 个答案:

答案 0 :(得分:2)

Intent intent = new Intent(this,HomeActivity.class);

在上面的行中,this引用 AsyncTask的实例Intent使用Application或Activity Context作为构造函数参数。

所以它应该是,

Intent intent = new Intent(<Your_Calling_Activity_Name.this>,HomeActivity.class);

在你的情况下,

Intent intent = new Intent(LoginActivity.this,HomeActivity.class);

Intent intent = new Intent(mContext,HomeActivity.class);

此处mContext是一个调用AsyncTask的活动上下文。您可以将此上下文传递给AsyncTask的构造函数。

答案 1 :(得分:1)

试试这个

  Intent intent = new Intent(getApplicationContext(),HomeActivity.class);
  startActivity(intent);

答案 2 :(得分:0)

问题出在这里 -

Intent intent = new Intent(this,HomeActivity.class);

在上面的代码中 - 这个指的是AsyncTask类。

相反,您可以使用 LoginActivity.this 或上下文。

Intent intent = new Intent(LoginActivity.this,HomeActivity.class);

答案 3 :(得分:0)

试试这个

flex: 1