onCreate(Bundle)已在.com中定义

时间:2017-01-21 13:27:12

标签: java android android-studio

如何修复onCreate的重复。

我尝试将onCreate更改为onCreate1

但@Override收到错误

"方法不会覆盖超类"

中的方法

我该如何解决这个问题,请多多谢谢你

@Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);

            email = (EditText) findViewById(R.id.email);
            password = (EditText) findViewById(R.id.password);
            login = (Button) findViewById(R.id.login);
            signup = (TextView) findViewById(R.id.open_signup);
            progressDialog = new ProgressDialog(this);
            session = new UserSession(this);
            userInfo = new UserInfo(this);

            if (session.isUserLoggedin()) {
                startActivity(new Intent(this, MainActivity.class));
                finish();

            }

            login.setOnClickListener(this);
            signup.setOnClickListener(this);

        }

        private void login(final String email, final String password) {
            //Tag used to cancel the request
            String tag_string_req = "req_login";
            progressDialog.setMessage("Logging in....");
            progressDialog.show();

        StringRequest strReq = new StringRequest(Request.Method.POST,
                Utils.LOGIN_URL, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Login Response: " + response.toString());

                try {
                    JSONObject jObj = new JSONObject(response);
                    boolean error = jObj.getBoolean("error");

                    //check for error node in json
                    if (!error) {
                        //now store the user in SQLite
                        JSONObject user = jObj.getJSONObject("user");
                        String uName = user.getString("username");
                        String email = user.getString("email");

                        //Inserting row in users table
                        userInfo.setEmail(email);
                        userInfo.setUsername(uName);
                        session.setLoggedin(true);

                        startActivity(new Intent(Login.this, MainActivity.class));
                        finish();
                    } else {
                        //error in login, get the error message
                        String errorMsg = jObj.getString("error_msg");
                        toast(errorMsg);
                    }
                } catch (JSONException e) {
                    //json error
                    e.printStackTrace();
                    toast("Json error: " + e.getMessage());

                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Login Error: " + error.getMessage());
                toast("Unknown Error occured");
                progressDialog.hide();
            }

        }) {
            @Override
            protected Map<String, String> getParams() {
                //Posting parameters to login url
                Map<String, String> params = new HashMap<>();
                params.put("email", email);
                params.put("password", password);

                return params;

            }

            ;

//Adding request to request queue
            AndroidLoginController.getInstance();

            addToRequestQueue(strReq, tag_string_req);
        }

    private void toast(String x) {
        Toast.makeText(this, x, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.login:
                String uName = email.getText().toString().trim();
                String pass = password.getText().toString().trim();

                login(uName, pass);
                break;
            case R.id.open_signup:
                startActivity(new Intent(this, SignUp.class));
                break;

        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }

    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    public Action getIndexApiAction() {
        Thing object = new Thing.Builder()
                .setName("Login Page") // TODO: Define a title for the content shown.
                // TODO: Make sure this auto-generated URL is correct.
                .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
                .build();
        return new Action.Builder(Action.TYPE_VIEW)
                .setObject(object)
                .setActionStatus(Action.STATUS_TYPE_COMPLETED)
                .build();
    }

    @Override
    public void onStart() {
        super.onStart();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client.connect();
        AppIndex.AppIndexApi.start(client, getIndexApiAction());
    }

    @Override
    public void onStop() {
        super.onStop();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        AppIndex.AppIndexApi.end(client, getIndexApiAction());
        client.disconnect();
    }
    }

2 个答案:

答案 0 :(得分:0)

您不需要两种onCreate方法。您需要在这两种方法之一中完成所需的所有工作。

删除另一个

在Java中,不可能有两个具有相同签名的方法。 此外,Android会自动调用onCreate,因此在未执行的代码中应创建onCreate1方法。

答案 1 :(得分:0)

删除

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }

在您的第一个onCreate

中添加以下行
 client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();

例如:

@Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);

            email = (EditText) findViewById(R.id.email);
            password = (EditText) findViewById(R.id.password);
            login = (Button) findViewById(R.id.login);
            signup = (TextView) findViewById(R.id.open_signup);
            progressDialog = new ProgressDialog(this);


            client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();

            session = new UserSession(this);
            userInfo = new UserInfo(this);

            if (session.isUserLoggedin()) {
                startActivity(new Intent(this, MainActivity.class));
                finish();

            }

            login.setOnClickListener(this);
            signup.setOnClickListener(this);

        }
  

Method不会覆盖超类

中的方法

表示您的覆盖方法无法找到superclass方法,因为该名称没有超类方法

我引用this回答

  

为什么我们被迫调用super.method()?

构成Android SDK的类可能非常复杂。例如,活动和片段必须执行许多操作才能正常工作(即管理生命周期,优化存储器使用,将布局绘制到屏幕等)。要求客户端调用基类(通常在方法的开头)确保仍然执行这些操作,同时仍为开发人员提供合理的抽象级别。

  

我们如何知道函数 方法需要调用super?

文档应该告诉您这是否是必需的。如果我没有谷歌搜索一些示例代码(或检查API演示......或者更好,请查看源代码!)。它不应该太难理解。