簡體   English   中英

onCreate(Bundle) 已在 .com 中定義

[英]onCreate(Bundle) is already defined in .com

我如何解決這個重復的 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();
    }
    }

您不需要兩個onCreate方法。 您需要在這兩種方法之一中完成您需要的所有操作。

刪除另一個

在 Java 中不可能有兩個具有相同簽名的方法。 此外,Android 會自動調用onCreate ,因此創建onCreate1方法應該在未執行的代碼中解析。

消除

 @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();
    }

在您的 First 且僅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);

        }

方法不會覆蓋其超類中的方法

意味着您的覆蓋方法找不到superclass方法,因為該名稱沒有超類方法


對於我引用這個答案

為什么我們被迫調用 super.method()?

構成 Android SDK 的類可能非常復雜。 例如,活動和片段都必須執行許多操作才能正常運行(即管理生命周期、優化內存使用、將布局繪制到屏幕等)。 要求客戶端調用基類(通常在方法的開頭)確保這些操作仍然被執行,同時仍然為開發人員提供合理的抽象級別。

我們怎么知道一個 函數 方法需要調用 super 呢?

文檔應該告訴您是否需要這樣做。 如果沒有,我會在 Google 上搜索一些示例代碼(或查看 API 演示……或者更好的是,查看源代碼!)。 想出來應該不難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM