Je crée un système simple qui a un service Windows en cours d'exécution, complet avec une table d'utilisateurs, et je veux valider les informations de connexion de quelqu'un en envoyant quelque chose au service. J'essaie d'envoyer leur nom d'utilisateur et mot de passe, mais je continue d'obtenir une erreur avec ma tâche asynchrone. Je sais que vous n'êtes pas censé jouer avec des trucs d'interface utilisateur et je ne le suis pas. A l'origine, j'ai eu un appel à une autre activité là-bas mais je l'ai commenté. Maintenant, la seule chose dans doInBackground est de définir une valeur booléenne à true si la validation était bonne. A partir de là, j'ai lu la valeur après l'exécution de l'async, puis mis ensemble un paquet pour passer à l'endroit suivant. Je ne sais pas ce qui ne va pas ici. Cela fait longtemps que je n'ai pas programmé sur Android alors peut-être qu'il me manque quelque chose de stupide. Si quelqu'un pouvait m'aider, je l'apprécierais grandement! Je vous remercie. Cela pourrait également être un problème avec l'envoi de l'information au service? MISE À JOUR: Après avoir ajouté l'utilisation d'Internet dans le manifeste, si j'ai le log.d dans le programme de mon doInBackground, il s'imprime. Si je ne l'ai pas, la valeur du résultat reste fausse. Il semble qu'il y ait un certain problème avec la connexion entre mon service et Android app ...Erreur de tâche asynchrone Android avec ClientService
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends Activity {
private static final int DATA_FROM_MAIN_ACTIVITY = 1;
private static final String SERVICEURL = "http://localhost:56638/ClientService.svc";
private EditText userTextBox, passTextBox;
private Button loginButton;
private String uName, pass;
private Boolean result = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
userTextBox = (EditText) findViewById(R.id.userTextBox);
passTextBox = (EditText) findViewById(R.id.passTextBox);
loginButton = (Button) findViewById(R.id.loginButton);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uName = userTextBox.getText().toString();
pass = passTextBox.getText().toString();
SendLoginMessage task = new SendLoginMessage();
task.execute(uName, pass);
if (result.equals(true)) {
Intent goToMainScreen = new Intent(getApplicationContext(),
MainActivity.class);
goToMainScreen.putExtra("username", uName);
goToMainScreen.putExtra("password", pass);
startActivityForResult(goToMainScreen,
DATA_FROM_MAIN_ACTIVITY);
} else {
Toast.makeText(
getApplicationContext(),
"There was an issue with your username or password.",
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class SendLoginMessage extends AsyncTask<String, String, Void> {
@Override
protected void onPreExecute() {
// Log.d("message almost at server, " + textFromArea, selected,
// null);
}
@Override
protected Void doInBackground(String... names) {
ArrayList<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("username", names[0]));
postParams.add(new BasicNameValuePair("password", names[1]));
String response = null;
try {
response = HttpClient.executeHttpPost(SERVICEURL, postParams);
String newResponse = response.toString();
newResponse = newResponse.replaceAll("\\s+", "");
// if user was authenticated...
if (newResponse.equals(true)) {
result = true;
// creating an intent to take user to next page.
// load their DB objects on the
// on create in other activity
// pass the username/password to next activity
// then make a request to the server for their database
// objects.
// Intent goToMainScreen = new
// Intent(getApplicationContext(), MainActivity.class);
// goToMainScreen.putExtra("username", names[0]);
// goToMainScreen.putExtra("password", names[1]);
// startActivityForResult(goToMainScreen,
// DATA_FROM_MAIN_ACTIVITY);
}
} catch (Exception e) {
Log.d("ERROR", "exception in background");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// Toast.makeText(getApplicationContext(),
// .show();
}
}
}
Quelle est l'erreur que vous continuez d'obtenir? – codeMagic
Ceci est probablement un problème 'if (newResponse.equals (true))' il devrait être if (newResponse.equals ("true")) puisque vous comparez 'Strings' maintenant – codeMagic
J'ai également ajouté l'utilisation d'Internet dans mon manifeste, mais cela n'a pas éclairci les choses. J'ai également changé le .equals à une vérification de chaîne, mais cela n'a pas fait de différence non plus. – Tastybrownies