我正在开发一个基本上正在登录的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
答案 0 :(得分:0)
我认为如果您在模拟器中运行“localhost / Navigation / connect.php”将无效,您应该使用“http://10.0.2.2/Navigation/connect.php”,或者如果您在真实设备上运行,请确保您的移动设备和计算机正在同一网络上运行并将网址指向“http://your_computer_ip_address/Navigation/connect.php”