我正在Android上设置应用程序,现在正在尝试登录系统。
所以我用php创建了一个API,如果凭据很好,我会尝试在Java代码中收回JWT令牌。
public class ConnectionActivity extends AppCompatActivity {
private EditText email;
private EditText mdp;
private Button connect;
private byte[] encodedhash;
private ConnectionActivity activity;
private String result = "";
private String emailStr;
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
private InputStream is;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connection);
this.mdp = (EditText) findViewById(R.id.mdp_connect);
this.connect = (Button) findViewById(R.id.button_connect);
this.email = (EditText) findViewById(R.id.email_connect);
this.activity = this;
connect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mdp != null && email != null) {
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
encodedhash = digest.digest(mdp.getText().toString().getBytes(StandardCharsets.UTF_8));
//TODO Finsih the connect ot BDD : resolve the problem of postParameters
emailStr = email.getText().toString();
postParameters.add(new BasicNameValuePair("email", emailStr));
postParameters.add(new BasicNameValuePair("mdp", encodedhash.toString()));
Log.d("connect1", emailStr);
ConnectTask cntTask = new ConnectTask();
cntTask.execute();
} else {
Toast.makeText(activity, "Tout les champs doivent êtres remplies", Toast.LENGTH_SHORT).show();
}
}
});
}
public class ConnectTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://****/connexion.php");
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("connect", "Error in http connection "+e.toString());
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
Log.d("connect1", result);
}catch(Exception e){
Log.e("connect", "Error converting result "+e.toString());
}
return result;
}
//This Method is called when Network-Request finished
protected void onPostExecute(String serverData) {
if (result == "IMDP") {
Toast.makeText(activity, "Mot de passe invalide", Toast.LENGTH_LONG).show();
} else if (result == "IEM") {
Toast.makeText(activity, "Adresse email inconue, veuillez vous incrire", Toast.LENGTH_LONG).show();
} else {
try {
File temp = File.createTempFile("JWT", ".tmp");
BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
bw.write(result);
bw.close();
Toast.makeText(activity, "Connecté", Toast.LENGTH_LONG).show();
String str;
BufferedReader br = new BufferedReader(new FileReader(temp));
while((str = br.readLine()) != null) {
Log.d("debugInscrip", str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
所以问题在于API返回我的电子邮件地址和密码为空,但是我之前使用Advanced REST Client之类的软件测试了API,并且一切运行正常。所以我认为问题出在ArrayList postParameters。
希望您能帮助我。抱歉,如果我的英语不太好,我仍在学习。顺便说一句,如果您不了解日志消息的内容,请放心,只是调试消息;)。