无法在同一个包中解析类,使用eclipse进行异步android开发

时间:2013-04-01 12:42:07

标签: android eclipse asynchronous

这是我的第一个Android项目,如果我错过了什么,请原谅我的无知!

我正在尝试使用json / php / mysql将注册表单更改为使用async,我得到的错误是RegisterTask无法解析为此行上的类型     new RegisterTask()。execute();

我的完整代码是:

    package com.app.pubcrawlorganiser;

    import org.json.JSONException;
    import org.json.JSONObject;

    import com.app.pubcrawlorganiser.library.DatabaseHandler;
    import com.app.pubcrawlorganiser.library.JSONParser;
    import com.app.pubcrawlorganiser.library.UserFunctions;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.os.StrictMode.ThreadPolicy;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    @SuppressWarnings("unused")
    public class RegisterActivity extends Activity 
    {

    Button btnRegister;
    Button btnLinkToLogin;
    EditText inputFullName;
    EditText inputEmail;
    EditText inputPassword;
    TextView registerErrorMsg;

    // JSON Response node names
    private static String KEY_SUCCESS = "success";
    private static String KEY_ERROR = "error";
    private static String KEY_ERROR_MSG = "error_msg";
    private static String KEY_UID = "uid";
    private static String KEY_NAME = "name";
    private static String KEY_EMAIL = "email";
    private static String KEY_CREATED_AT = "created_at";

    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);


        // Importing all assets like buttons, text fields
        inputFullName = (EditText) findViewById(R.id.registerName);
        inputEmail = (EditText) findViewById(R.id.registerEmail);
        inputPassword = (EditText) findViewById(R.id.registerPassword);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
        registerErrorMsg = (TextView) findViewById(R.id.register_error);

        // Register Button Click event
        btnRegister.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View v) 
                    {                
                        new RegisterTask().execute();

                    }
            }
);
                class RegisterTask extends AsyncTask<String, String, String>
            {
                protected void onPreExecute()
                {
                    super.onPreExecute();
                }

                protected String doInBackground(String... args)
                {
                    String name = inputFullName.getText().toString();
                    String email = inputEmail.getText().toString();
                    String password = inputPassword.getText().toString();            
                    UserFunctions userFunction = new UserFunctions();
                    JSONObject json = userFunction.registerUser(name, email, password);

               try {
                    if (json.getString(KEY_SUCCESS) != null) 
                    {
                        registerErrorMsg.setText("");
                        String res = json.getString(KEY_SUCCESS);
                        if(Integer.parseInt(res) == 1)
                        {
                            DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                            JSONObject json_user = json.getJSONObject("user");
                            userFunction.logoutUser(getApplicationContext());
                            db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));
                            Intent dashboard = new Intent(getApplicationContext(), Home.class);
                            dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(dashboard);
                            finish();
                        }
                        else
                        {
                            registerErrorMsg.setText("Error occured in registration");
                        }
                    }
                    }
               catch (JSONException e) 
               {
                    e.printStackTrace();
               }
            return null;
            }
        };}

        protected void onPostExecute()
        {
            btnLinkToLogin.setOnClickListener(new View.OnClickListener() 
        {
             public void onClick(View view) 
                {
                    Intent i = new Intent(getApplicationContext(),
                    WelcomeActivity.class);
                    startActivity(i);
                    // Close Registration View
                    finish();
                }
        });
    }
}

为什么我不能在同一个包中使用一个类?

1 个答案:

答案 0 :(得分:1)

您无法在方法内定义内部类!将其移到onCreate()之外,它应该可以正常工作。

PS:内部类应该添加在外部类的顶部或最底部。取决于您的编码规则/准则。把它放在中间的某个地方非常令人困惑......