背景方法中的例外

时间:2016-10-12 01:04:50

标签: android

我正在开发一个基本上正在登录的Android应用程序,我的数据库在MySQL(本地)。我在doInBackground方法

中收到错误消息
public class Login extends Activity{


    private EditText editTextUserName;
    private EditText editTextPassword;
    Button login;

    String username;
    String password;

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

        editTextUserName = (EditText) findViewById(R.id.txtUsername);
        editTextPassword = (EditText) findViewById(R.id.txtPassword);
        login = (Button)findViewById(R.id.btnLogin);


    }

    public void invokeLogin(View view){
        username = editTextUserName.getText().toString();
        password = editTextPassword.getText().toString();

        login(username,password);
    }

    private void login(final String username, String password) {

        class LoginAsync extends AsyncTask<String, Void, String>{

            private Dialog loadingDialog;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loadingDialog = ProgressDialog.show(Login.this, "Please wait", "Loading...");
            }

            @Override
            protected String doInBackground(String... params) {
                String uname = editTextUserName.getText().toString();
                String pass = editTextPassword.getText().toString();

                InputStream is = null;
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("editTextUserName", uname));
                nameValuePairs.add(new BasicNameValuePair("editTextPassword", pass));
                String result = null;

                try{
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost("localhost/Navigation/connect.php");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpClient.execute(httpPost);
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }
                    result = sb.toString();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    } catch (IOException e){
                    e.printStackTrace();
                }
                return result;
            }

            @Override
            protected void onPostExecute(String result){
                String s = result.trim();
                loadingDialog.dismiss();
                if(s.equalsIgnoreCase("success")){
                Intent intent = new Intent(Login.this, MainActivity.class);
                //intent.putExtra(USER_NAME, username);
                finish();
                startActivity(intent);
                } else {
                    Toast.makeText(getApplicationContext(), "Invalid User Name or Password", Toast.LENGTH_LONG).show();
                }
            }
        }
        LoginAsync la = new LoginAsync();
        la.execute(username, password);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

错误:

10-11 21:03:34.430: E/AndroidRuntime(858): FATAL EXCEPTION: AsyncTask #2
10-11 21:03:34.430: E/AndroidRuntime(858): Process: com.example.navigation, PID: 858
10-11 21:03:34.430: E/AndroidRuntime(858): java.lang.RuntimeException: An error occured while executing doInBackground()
10-11 21:03:34.430: E/AndroidRuntime(858):  at android.os.AsyncTask$3.done(AsyncTask.java:300)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
10-11 21:03:34.430: E/AndroidRuntime(858):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.lang.Thread.run(Thread.java:841)
10-11 21:03:34.430: E/AndroidRuntime(858): Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=localhost/Navigation/connect.php
10-11 21:03:34.430: E/AndroidRuntime(858):  at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
10-11 21:03:34.430: E/AndroidRuntime(858):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
10-11 21:03:34.430: E/AndroidRuntime(858):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-11 21:03:34.430: E/AndroidRuntime(858):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-11 21:03:34.430: E/AndroidRuntime(858):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-11 21:03:34.430: E/AndroidRuntime(858):  at com.example.navigation.Login$1LoginAsync.doInBackground(Login.java:93)
10-11 21:03:34.430: E/AndroidRuntime(858):  at com.example.navigation.Login$1LoginAsync.doInBackground(Login.java:1)
10-11 21:03:34.430: E/AndroidRuntime(858):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
10-11 21:03:34.430: E/AndroidRuntime(858):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-11 21:03:34.430: E/AndroidRuntime(858):  ... 4 more

1 个答案:

答案 0 :(得分:0)

我认为如果您在模拟器中运行“localhost / Navigation / connect.php”将无效,您应该使用“http://10.0.2.2/Navigation/connect.php”,或者如果您在真实设备上运行,请确保您的移动设备和计算机正在同一网络上运行并将网址指向“http://your_computer_ip_address/Navigation/connect.php