执行Android默认布局活动的LoginActivity.java时出错

执行Android默认布局活动的LoginActivity.java时出错,java,php,android,mysql,wampserver,Java,Php,Android,Mysql,Wampserver,我已经在Android Studio的新活动下使用内置模板创建了一个LoginActivity。我使用了一个带有PHP脚本的SqlDatabase,用于使用post方法进行登录。当我执行此代码时,我得到2个错误: 1) 错误:(370,9)错误:方法不重写或实现超类型中的方法 C:\Users\Chethan\AndroidStudioProjects\CleanMyChennai\app\src\main\java\com\example\Chethan\myapplication\Login

我已经在Android Studio的新活动下使用内置模板创建了一个LoginActivity。我使用了一个带有PHP脚本的SqlDatabase,用于使用post方法进行登录。当我执行此代码时,我得到2个错误:

1) 错误:(370,9)错误:方法不重写或实现超类型中的方法

C:\Users\Chethan\AndroidStudioProjects\CleanMyChennai\app\src\main\java\com\example\Chethan\myapplication\LoginPage.java

2) 错误:任务“:app:compiledBugJavaWithJavaC”的执行失败。 编译失败;有关详细信息,请参阅编译器错误输出

如何修复这两个错误。顺便说一下,我是java编码的初学者。 如果你发现我哪里出了问题,请帮我。。我还没有发现任何教程使用Android Studio中提供的默认“LoginActivity”布局。我想连接loginactivity.java和PHP MySql连接

package com.example.chethan.myapplication;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import static android.Manifest.permission.READ_CONTACTS;
import static java.net.URLEncoder.encode;
   /**
    * A login screen that offers login via email/password.
    */

 public class LoginPage extends AppCompatActivity implements LoaderCallbacks<Cursor> {

/**
 * Id to identity READ_CONTACTS permission request.
 */
private static final int REQUEST_READ_CONTACTS = 0;

/**
 * A dummy authentication store containing known user names and passwords.
 * TODO: remove after connecting to a real authentication system.
 */
private static final String[] DUMMY_CREDENTIALS = new String[]{
        "foo@example.com:hello", "bar@example.com:world"
};
/**
 * Keep track of the login task to ensure we can cancel it if requested.
 */
private UserLoginTask mAuthTask = null;

// UI references.
private AutoCompleteTextView mEmailView;
private EditText mPasswordView;
private View mProgressView;
private View mLoginFormView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_page);
    // Set up the login form.
    mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
    populateAutoComplete();

    mPasswordView = (EditText) findViewById(R.id.password);
    mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
            if (id == R.id.login || id == EditorInfo.IME_NULL) {
                attemptLogin();
                return true;
            }
            return false;
        }
    });

    Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
    mEmailSignInButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            attemptLogin();


        }
    });

    mLoginFormView = findViewById(R.id.login_form);
    mProgressView = findViewById(R.id.login_progress);
}

private void populateAutoComplete() {
    if (!mayRequestContacts()) {
        return;
    }

    getLoaderManager().initLoader(0, null, this);
}

private boolean mayRequestContacts() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        return true;
    }
    if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
        return true;
    }
    if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
        Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
                .setAction(android.R.string.ok, new View.OnClickListener() {
                    @Override
                    @TargetApi(Build.VERSION_CODES.M)
                    public void onClick(View v) {
                        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
                    }
                });
    } else {
        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
    }
    return false;
}

/**
 * Callback received when a permissions request has been completed.
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    if (requestCode == REQUEST_READ_CONTACTS) {
        if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            populateAutoComplete();
        }
    }
}


/**
 * Attempts to sign in or register the account specified by the login form.
 * If there are form errors (invalid email, missing fields, etc.), the
 * errors are presented and no actual login attempt is made.
 */
private void attemptLogin() {
    if (mAuthTask != null) {
        return;
    }

    // Reset errors.
    mEmailView.setError(null);
    mPasswordView.setError(null);

    // Store values at the time of the login attempt.
    String email = mEmailView.getText().toString();
    String password = mPasswordView.getText().toString();

    boolean cancel = false;
    View focusView = null;

    // Check for a valid password, if the user entered one.
    if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
        mPasswordView.setError(getString(R.string.error_invalid_password));
        focusView = mPasswordView;
        cancel = true;
    }

    // Check for a valid email address.
    if (TextUtils.isEmpty(email)) {
        mEmailView.setError(getString(R.string.error_field_required));
        focusView = mEmailView;
        cancel = true;
    } else if (!isEmailValid(email)) {
        mEmailView.setError(getString(R.string.error_invalid_email));
        focusView = mEmailView;
        cancel = true;
    }

    if (cancel) {
        // There was an error; don't attempt login and focus the first
        // form field with an error.
        focusView.requestFocus();
    } else {
        // Show a progress spinner, and kick off a background task to
        // perform the user login attempt.
        showProgress(true);
        mAuthTask = new UserLoginTask(email, password);
       // mAuthTask.execute((Void) null);
        mAuthTask.execute();
    }
}

private boolean isEmailValid(String email) {
    //TODO: Replace this with your own logic
    return email.contains("@");
}

private boolean isPasswordValid(String password) {
    //TODO: Replace this with your own logic
    return password.length() > 4;
}

/**
 * Shows the progress UI and hides the login form.
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private void showProgress(final boolean show) {
    // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
    // for very easy animations. If available, use these APIs to fade-in
    // the progress spinner.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);

        mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
        mLoginFormView.animate().setDuration(shortAnimTime).alpha(
                show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
            }
        });

        mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
        mProgressView.animate().setDuration(shortAnimTime).alpha(
                show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
            }
        });
    } else {
        // The ViewPropertyAnimator APIs are not available, so simply show
        // and hide the relevant UI components.
        mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
        mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
    }
}

@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
    return new CursorLoader(this,
            // Retrieve data rows for the device user's 'profile' contact.
            Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
                    ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,

            // Select only email addresses.
            ContactsContract.Contacts.Data.MIMETYPE +
                    " = ?", new String[]{ContactsContract.CommonDataKinds.Email
            .CONTENT_ITEM_TYPE},

            // Show primary email addresses first. Note that there won't be
            // a primary email address if the user hasn't specified one.
            ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
}

@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    List<String> emails = new ArrayList<>();
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        emails.add(cursor.getString(ProfileQuery.ADDRESS));
        cursor.moveToNext();
    }

    addEmailsToAutoComplete(emails);
}

@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {

}

private void addEmailsToAutoComplete(List<String> emailAddressCollection) {
    //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list.
    ArrayAdapter<String> adapter =
            new ArrayAdapter<>(LoginPage.this,
                    android.R.layout.simple_dropdown_item_1line, emailAddressCollection);

    mEmailView.setAdapter(adapter);
}


private interface ProfileQuery {
    String[] PROJECTION = {
            ContactsContract.CommonDataKinds.Email.ADDRESS,
            ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
    };

    int ADDRESS = 0;
    int IS_PRIMARY = 1;
}

/**
 * Represents an asynchronous login/registration task used to authenticate
 * the user.
 */
public class UserLoginTask extends AsyncTask<String, String, String> {

    private final String mEmail;
    private final String mPassword;

    UserLoginTask(String email, String password) {
        mEmail = email;
        mPassword = password;
    }

    @Override
    protected String doInBackground(String... params) {
        // TODO: attempt authentication against a network service.

        try {
            // Simulate network access.
            //Thread.sleep(2000);
            String username = (String)params[0];
            String password = (String)params[1];

            String link="http://localhost/login.php";
            String data  = encode("username", "UTF-8") + "=" + encode(username, "UTF-8");
            data += "&" + encode("password", "UTF-8") + "=" + encode(password, "UTF-8");

            URL url = new URL(link);
            URLConnection conn = url.openConnection();

            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

            wr.write( data );
            wr.flush();

            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            StringBuilder sb = new StringBuilder();
            String line = null;

            // Read Server Response
            while((line = reader.readLine()) != null)
            {
                sb.append(line);
                break;
            }
            return sb.toString();
        }
        catch (Exception e) {
            //return false;
            return new String("Exception: " + e.getMessage());
        }
/*
        for (String credential : DUMMY_CREDENTIALS) {
            String[] pieces = credential.split(":");
            if (pieces[0].equals(mEmail)) {
                // Account exists, return true if the password matches.
                return pieces[1].equals(mPassword);
            }
        }
 */
 /*          TODO: register the new account here. */
 /*            return true;  */
    }

    @Override
    protected void onPostExecute(final Boolean success) {
 //            super.onPostExecute(success);
        mAuthTask = null;
        showProgress(false);

        if (success) {

            finish();
            Toast.makeText(getApplicationContext(),"login success",Toast.LENGTH_SHORT).show();
            Intent myIntent = new Intent(LoginPage.this,Authorities.class);
            LoginPage.this.startActivity(myIntent);
        } else {
            mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
        }
    }

    @Override
    protected void onCancelled() {
        mAuthTask = null;
        showProgress(false);
    }
}
}
package com.example.chethan.myapplication;
导入android.animation.Animator;
导入android.animation.AnimatorListenerAdapter;
导入android.annotation.TargetApi;
导入android.app.LoaderManager.LoaderCallbacks;
导入android.content.CursorLoader;
导入android.content.Intent;
导入android.content.Loader;
导入android.content.pm.PackageManager;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.os.Build;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.support.annotation.NonNull;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppActivity;
导入android.text.TextUtils;
导入android.view.KeyEvent;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.inputmethod.EditorInfo;
导入android.widget.ArrayAdapter;
导入android.widget.AutoCompleteTextView;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.OutputStreamWriter;
导入java.net.URL;
导入java.net.URLConnection;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入java.util.List;
导入静态android.Manifest.permission.READ_联系人;
导入静态java.net.URLEncoder.encode;
/**
*提供通过电子邮件/密码登录的登录屏幕。
*/
公共类LoginPage扩展AppCompatActivity实现LoaderCallbacks{
/**
*身份识别读取\联系人权限请求的Id。
*/
私有静态最终int请求\u读取\u联系人=0;
/**
*包含已知用户名和密码的虚拟身份验证存储。
*TODO:连接到真实身份验证系统后删除。
*/
私有静态最终字符串[]伪\u凭据=新字符串[]{
"foo@example.com:你好“bar@example.com:世界“
};
/**
*跟踪登录任务,确保我们可以根据请求取消它。
*/
private UserLoginTask mAuthTask=null;
//用户界面引用。
私有AutoCompleteTextView mEmailView;
私有编辑文本mPasswordView;
私有视图mProgressView;
私有视图mloginfo视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u login\u页面);
//设置登录表单。
mEmailView=(AutoCompleteTextView)findviewbyd(R.id.email);
populateAutoComplete();
mPasswordView=(EditText)findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(新的TextView.OnEditorActionListener(){
@凌驾
公共布尔onEditorAction(TextView TextView、int id、KeyEvent KeyEvent){
if(id==R.id.login | | id==EditorInfo.IME_NULL){
尝试登录();
返回true;
}
返回false;
}
});
按钮mEmailSignInButton=(按钮)findViewById(R.id.email\u sign\u in\u按钮);
setOnClickListener(新的OnClickListener()){
@凌驾
公共void onClick(视图){
尝试登录();
}
});
mLoginFormView=findviewbyd(R.id.login\u表单);
mProgressView=findviewbyd(R.id.login\u progress);
}
私有void populateAutoComplete(){
如果(!mayRequestContacts()){
返回;
}
getLoaderManager().initLoader(0,null,this);
}
私有布尔mayRequestContacts(){
if(Build.VERSION.SDK_INT protected void onPostExecute(final String success) {
     //            super.onPostExecute(success);
    mAuthTask = null;
    showProgress(false);

    if (success.equals("true")) {

        finish();
        Toast.makeText(getApplicationContext(),"login success",Toast.LENGTH_SHORT).show();
        Intent myIntent = new Intent(LoginPage.this,Authorities.class);
        LoginPage.this.startActivity(myIntent);
    } else {
        mPasswordView.setError(getString(R.string.error_incorrect_password));
        mPasswordView.requestFocus();
    }
}