Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpResponse HttpResponse=httpClient.execute(httpPost)引发的运行时错误;_Java_Android_Mysql_Eclipse_Http - Fatal编程技术网

Java HttpResponse HttpResponse=httpClient.execute(httpPost)引发的运行时错误;

Java HttpResponse HttpResponse=httpClient.execute(httpPost)引发的运行时错误;,java,android,mysql,eclipse,http,Java,Android,Mysql,Eclipse,Http,嘿,伙计们,我对编码有点陌生,但我已经尽力了。我一直在学习这个登录和注册教程。我下载了他的源代码并添加了我的数据库信息,它在eclipse中与他的项目一起工作。但是,当我在项目中运行它时,当我单击“登录”或“注册”时,它就会退出。我使用断点检查了调试器,发现错误似乎在这一行: HttpResponse httpResponse = httpClient.execute(httpPost); 老实说,我不确定问题出在哪里,我真的需要一些帮助。请记住,由于我是初学者,我可能

嘿,伙计们,我对编码有点陌生,但我已经尽力了。我一直在学习这个登录和注册教程。我下载了他的源代码并添加了我的数据库信息,它在eclipse中与他的项目一起工作。但是,当我在项目中运行它时,当我单击“登录”或“注册”时,它就会退出。我使用断点检查了调试器,发现错误似乎在这一行:

            HttpResponse httpResponse = httpClient.execute(httpPost);
老实说,我不确定问题出在哪里,我真的需要一些帮助。请记住,由于我是初学者,我可能还不了解一些高级函数/术语。下面是我在主包(brg.application.alarmmonitor)和DatabaseHandler.java JSONParser.java UserFunctions.java作为库(brg.application.alarmmonitor.library)下的Login.java Register.java代码,以及Eclipse中LogCat的一些错误

Login.java

package brg.application.alarmmonitor;

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

import brg.application.alarmmonitor.Dashboard;
import brg.application.alarmmonitor.Register;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import brg.application.alarmmonitor.library.DatabaseHandler;
import brg.application.alarmmonitor.library.UserFunctions;

public class Login extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;

// 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";

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

    // Importing all assets like buttons, text fields
    inputEmail = (EditText) findViewById(R.id.loginEmail);
    inputPassword = (EditText) findViewById(R.id.loginPassword);
    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLinkToRegister = (Button) findViewById(R.id.link_to_register);
    loginErrorMsg = (TextView) findViewById(R.id.login_error);

    // Login button Click Event
    btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            String email = inputEmail.getText().toString();
            String password = inputPassword.getText().toString();
            UserFunctions userFunction = new UserFunctions();
            Log.d("Button", "Login");
            JSONObject json = userFunction.loginUser(email, password);

            // check for login response
            try {
                if (json.getString(KEY_SUCCESS) != null) {
                    loginErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(res) == 1){
                        // user successfully logged in
                        // Store user details in SQLite Database
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        // Clear all previous data in database
                        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));                        

                        // Launch Dashboard Screen
                        Intent dashboard = new Intent(getApplicationContext(), Dashboard.class);

                        // Close all views before launching Dashboard
                        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(dashboard);

                        // Close Login Screen
                        finish();
                    }else{
                        // Error in login
                        loginErrorMsg.setText("Incorrect username/password");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });

    // Link to Register Screen
    btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    Register.class);
            startActivity(i);
            finish();
        }
    });
}
}
package brg.application.alarmmonitor;

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

import brg.application.alarmmonitor.Dashboard;
import brg.application.alarmmonitor.Register;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import brg.application.alarmmonitor.library.DatabaseHandler;
import brg.application.alarmmonitor.library.UserFunctions;

public class Login extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;

// 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";

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

    // Importing all assets like buttons, text fields
    inputEmail = (EditText) findViewById(R.id.loginEmail);
    inputPassword = (EditText) findViewById(R.id.loginPassword);
    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLinkToRegister = (Button) findViewById(R.id.link_to_register);
    loginErrorMsg = (TextView) findViewById(R.id.login_error);

    // Login button Click Event
/**     btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            String email = inputEmail.getText().toString();
            String password = inputPassword.getText().toString();
            UserFunctions userFunction = new UserFunctions();
            Log.d("Button", "Login");
            JSONObject json = userFunction.loginUser(email, password);
**/


class LoginTask extends AsyncTask<String, String, String>  {

    ProgressDialog dialog = new ProgressDialog (Login.this);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Logging in...");
        dialog.setIndeterminate(false);
        dialog.setCancelable(true);
        dialog.show();
    }

    protected void onProgressUpdate(String... message) {
        loginErrorMsg.setText(message[0]);
    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        String email = inputEmail.getText().toString();
        String password = inputPassword.getText().toString();

        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.loginUser(email, password);

        Log.d("Button", "Login");

        // check for login response
        try {
            if (json.getString(KEY_SUCCESS) != null) {
                //loginErrorMsg.setText("");
                publishProgress(json.getString("loginErrorMsg"));
                String res = json.getString(KEY_SUCCESS); 
                if(Integer.parseInt(res) == 1){
                    // user successfully logged in
                    // Store user details in SQLite Database
                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                    JSONObject json_user = json.getJSONObject("user");

                    // Clear all previous data in database
                    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));

                    // Launch Dashboard Screen
                    Intent dashboard = new Intent(getApplicationContext(), Dashboard.class);

                    // Close all views before launching Dashboard
                    dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(dashboard);

                    // Close Login Screen
                    finish();
                }else{
                    // Error in login
                    //loginErrorMsg.setText("Incorrect username/password");
                    publishProgress(json.getString("Incorrect email/password"));
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;

    }

    @SuppressWarnings("unused")
    protected void onPostExecute() {
        dialog.dismiss();
    }

}

btnLogin.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        new LoginTask().execute();
    }
});         

    // Link to Register Screen
    btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    Register.class);
            startActivity(i);
            finish();
        }
    });
}
}
Register.java

package brg.application.alarmmonitor;

import org.json.JSONException;


import org.json.JSONObject;

import brg.application.alarmmonitor.Dashboard;
import brg.application.alarmmonitor.Login;
import brg.application.alarmmonitor.R;

import brg.application.alarmmonitor.library.DatabaseHandler;
import brg.application.alarmmonitor.library.UserFunctions;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Register 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";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    // Importing all assets like buttons, text fields
    inputFullName = (EditText) findViewById(R.id.reg_name);
    inputEmail = (EditText) findViewById(R.id.reg_email);
    inputPassword = (EditText) findViewById(R.id.reg_password);
    btnRegister = (Button) findViewById(R.id.btnRegister);
    btnLinkToLogin = (Button) findViewById(R.id.link_to_login);
    registerErrorMsg = (TextView) findViewById(R.id.reg_error);

    // Register Button Click event
    btnRegister.setOnClickListener(new View.OnClickListener() {         
        public void onClick(View view) {
            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);

            // check for login response
            try {
                if (json.getString(KEY_SUCCESS) != null) {
                    registerErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(res) == 1){
                        // user successfully registred
                        // Store user details in SQLite Database
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        // Clear all previous data in database
                        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));                        
                        // Launch Dashboard Screen
                        Intent dashboard = new Intent(getApplicationContext(), Dashboard.class);
                        // Close all views before launching Dashboard
                        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(dashboard);
                        // Close Registration Screen
                        finish();
                    }else{
                        // Error in registration
                        registerErrorMsg.setText("Error occured in registration");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });

    // Link to Login Screen
    btnLinkToLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    Login.class);
            startActivity(i);
            // Close Registration View
            finish();
        }
    });
}
}
DatabaseHandler.java

package brg.application.alarmmonitor.library;

import java.util.HashMap;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "a8855590_alarm";

// Login table name
private static final String TABLE_LOGIN = "login";

// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_EMAIL = "email";
private static final String KEY_UID = "uid";
private static final String KEY_CREATED_AT = "created_at";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
            + KEY_ID + " INTEGER PRIMARY KEY,"
            + KEY_NAME + " TEXT,"
            + KEY_EMAIL + " TEXT UNIQUE,"
            + KEY_UID + " TEXT,"
            + KEY_CREATED_AT + " TEXT" + ")";
    db.execSQL(CREATE_LOGIN_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);

    // Create tables again
    onCreate(db);
}

/**
 * Storing user details in database
 * */
public void addUser(String name, String email, String uid, String created_at) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, name); // Name
    values.put(KEY_EMAIL, email); // Email
    values.put(KEY_UID, uid); // Email
    values.put(KEY_CREATED_AT, created_at); // Created At

    // Inserting Row
    db.insert(TABLE_LOGIN, null, values);
    db.close(); // Closing database connection
}

/**
 * Getting user data from database
 * */
public HashMap<String, String> getUserDetails(){
    HashMap<String,String> user = new HashMap<String,String>();
    String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    if(cursor.getCount() > 0){
        user.put("name", cursor.getString(1));
        user.put("email", cursor.getString(2));
        user.put("uid", cursor.getString(3));
        user.put("created_at", cursor.getString(4));
    }
    cursor.close();
    db.close();
    // return user
    return user;
}

/**
 * Getting user login status
 * return true if rows are there in table
 * */
public int getRowCount() {
    String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();

    // return row count
    return rowCount;
}

/**
 * Re crate database
 * Delete all tables and create them again
 * */
public void resetTables(){
    SQLiteDatabase db = this.getWritableDatabase();
    // Delete All Rows
    db.delete(TABLE_LOGIN, null, null);
    db.close();
}

}
我知道有很多代码,对此我很抱歉,但我想确保您拥有帮助我解决问题所需的所有代码。再次感谢

乔纳森

编辑: 好的,所以我尝试将Login.java改为使用AsyncTask,我查找了一些我需要使用publishProgress的东西,但现在当我点击Login时,它只是说“登录…”很长一段时间,直到最后退出。以下是新代码和错误:

Login.java

package brg.application.alarmmonitor;

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

import brg.application.alarmmonitor.Dashboard;
import brg.application.alarmmonitor.Register;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import brg.application.alarmmonitor.library.DatabaseHandler;
import brg.application.alarmmonitor.library.UserFunctions;

public class Login extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;

// 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";

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

    // Importing all assets like buttons, text fields
    inputEmail = (EditText) findViewById(R.id.loginEmail);
    inputPassword = (EditText) findViewById(R.id.loginPassword);
    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLinkToRegister = (Button) findViewById(R.id.link_to_register);
    loginErrorMsg = (TextView) findViewById(R.id.login_error);

    // Login button Click Event
    btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            String email = inputEmail.getText().toString();
            String password = inputPassword.getText().toString();
            UserFunctions userFunction = new UserFunctions();
            Log.d("Button", "Login");
            JSONObject json = userFunction.loginUser(email, password);

            // check for login response
            try {
                if (json.getString(KEY_SUCCESS) != null) {
                    loginErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(res) == 1){
                        // user successfully logged in
                        // Store user details in SQLite Database
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        // Clear all previous data in database
                        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));                        

                        // Launch Dashboard Screen
                        Intent dashboard = new Intent(getApplicationContext(), Dashboard.class);

                        // Close all views before launching Dashboard
                        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(dashboard);

                        // Close Login Screen
                        finish();
                    }else{
                        // Error in login
                        loginErrorMsg.setText("Incorrect username/password");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });

    // Link to Register Screen
    btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    Register.class);
            startActivity(i);
            finish();
        }
    });
}
}
package brg.application.alarmmonitor;

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

import brg.application.alarmmonitor.Dashboard;
import brg.application.alarmmonitor.Register;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import brg.application.alarmmonitor.library.DatabaseHandler;
import brg.application.alarmmonitor.library.UserFunctions;

public class Login extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;

// 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";

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

    // Importing all assets like buttons, text fields
    inputEmail = (EditText) findViewById(R.id.loginEmail);
    inputPassword = (EditText) findViewById(R.id.loginPassword);
    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLinkToRegister = (Button) findViewById(R.id.link_to_register);
    loginErrorMsg = (TextView) findViewById(R.id.login_error);

    // Login button Click Event
/**     btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            String email = inputEmail.getText().toString();
            String password = inputPassword.getText().toString();
            UserFunctions userFunction = new UserFunctions();
            Log.d("Button", "Login");
            JSONObject json = userFunction.loginUser(email, password);
**/


class LoginTask extends AsyncTask<String, String, String>  {

    ProgressDialog dialog = new ProgressDialog (Login.this);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Logging in...");
        dialog.setIndeterminate(false);
        dialog.setCancelable(true);
        dialog.show();
    }

    protected void onProgressUpdate(String... message) {
        loginErrorMsg.setText(message[0]);
    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        String email = inputEmail.getText().toString();
        String password = inputPassword.getText().toString();

        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.loginUser(email, password);

        Log.d("Button", "Login");

        // check for login response
        try {
            if (json.getString(KEY_SUCCESS) != null) {
                //loginErrorMsg.setText("");
                publishProgress(json.getString("loginErrorMsg"));
                String res = json.getString(KEY_SUCCESS); 
                if(Integer.parseInt(res) == 1){
                    // user successfully logged in
                    // Store user details in SQLite Database
                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                    JSONObject json_user = json.getJSONObject("user");

                    // Clear all previous data in database
                    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));

                    // Launch Dashboard Screen
                    Intent dashboard = new Intent(getApplicationContext(), Dashboard.class);

                    // Close all views before launching Dashboard
                    dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(dashboard);

                    // Close Login Screen
                    finish();
                }else{
                    // Error in login
                    //loginErrorMsg.setText("Incorrect username/password");
                    publishProgress(json.getString("Incorrect email/password"));
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;

    }

    @SuppressWarnings("unused")
    protected void onPostExecute() {
        dialog.dismiss();
    }

}

btnLogin.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        new LoginTask().execute();
    }
});         

    // Link to Register Screen
    btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    Register.class);
            startActivity(i);
            finish();
        }
    });
}
}
您正在主线程内调用网络进程,这(通常)是不允许的。 您应该在单独的线程中调用getJSONFromUrl(…)

您可以使用原始线程调用它:

Thread thread = new Thread(new Runnable()
{
    @Override
    public void run()
    {
        getJSONFromUrl(...);
    }
}
thread.start()
或者使用异步任务

考虑到您需要将代码更改为“等待”,直到完成getJSONFromUrl(…),然后才能继续程序流程

编辑:我将添加一些关于如何继续流的内容。在您的情况下,您可以执行以下操作:

btnLogin.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        String email = inputEmail.getText().toString();
        String password = inputPassword.getText().toString();
        UserFunctions userFunction = new UserFunctions();
        Log.d("Button", "Login");

        // Here you should show a loading dialog or somthing, as this can take a couple o seconds

        Thread thread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                JSONObject json = userFunction.loginUser(email, password);

                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        ContinueFlow(); 
                    }
                }
            }

        }
    }
}
其中“ContinueFlow()”将是一个包含下面所有内容的方法

JSONObject json = userFunction.loginUser(email, password);
正如您所看到的,您必须调用UI线程中的所有其他东西(这就是runOnUiThread的动机)


使用AsyncTask(我认为它更干净)您不必弄乱ui线程(您只需在doInBackground中完成所有网络工作,并在onComplete(…)中继续执行流程即可)

Android禁止从应用程序的主线程使用网络操作:


我的建议是使用,以便执行您的网络操作。

好的,我会尝试一下,如果我听起来很无知,很抱歉,但是括号中会放什么,其中。。。是我在UserFunctions.java中列出了url,但奇怪的是,它在我从androidhive.infoOh下载的源代码项目中工作得很好,我只是说它有点懒,它只是原始方法的参数(loginURL,params)。关于它在其他项目中的工作,正如我所说的,这通常是不允许的。有一种方法可以通过取消限制(不记得怎么做,你可以用谷歌搜索),来绕过这个限制,但这是非常不鼓励的,因为在你的线程中玩网络东西会阻塞用户界面,直到请求完成为止(你现在不知道需要花多少时间)所以我只需要添加代码来代替
jsonobjectjson=jsonParser.getJSONFromUrl(loginURL,params)
公共JSONObject登录用户(…)
公共JSONObject注册表用户(…)
下?好的,我把它添加到我的Login.java中,它出现了一系列错误…我是不是把它添加到了错误的类中?抱歉,我只是感到困惑,我想为了帮助我更好地理解它,即使我不熟悉AsyncTask,也可以更轻松地使用它吗?我认为AsyncTask最适合我在将来学习和使用,因为它是更好、更干净的选项,因为我通常喜欢清理和抛光我的程序。我认为唯一的问题是,由于我仍然是eclipse、java和android开发的初学者,我不能完全确定我是否理解如何正确地使用AsyncTask。如果你有任何建议或任何东西来帮助我,将不胜感激!谢谢,乔纳森
Thread thread = new Thread(new Runnable()
{
    @Override
    public void run()
    {
        getJSONFromUrl(...);
    }
}
thread.start()
btnLogin.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        String email = inputEmail.getText().toString();
        String password = inputPassword.getText().toString();
        UserFunctions userFunction = new UserFunctions();
        Log.d("Button", "Login");

        // Here you should show a loading dialog or somthing, as this can take a couple o seconds

        Thread thread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                JSONObject json = userFunction.loginUser(email, password);

                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        ContinueFlow(); 
                    }
                }
            }

        }
    }
}
JSONObject json = userFunction.loginUser(email, password);