У меня есть код входа, который отлично работает в genymotion, и он не будет работать на Android Studio. В genymotion его имя пользователя и пароль находятся в базе данных, и я могу войти в систему, в то время как в android studio постоянно говорят, что в файле php есть синтаксическая ошибка. Я уже скопировал, вставил один и тот же код для всего, и он все еще дает мне ту же ошибку.
package com.example.login2;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class login2 extends Activity {
EditText un,pw;
TextView error;
Button ok;
protected String macAddress;
protected String IPAddress;
protected String version;
/** Called when the activity is first created. */
// public void LoggedIn(View view) {
// Do something in response to button
// Intent intent = new Intent(this, Logout.class);
// startActivity(intent);
// }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
un=(EditText)findViewById(R.id.et_un);
pw=(EditText)findViewById(R.id.et_pw);
ok=(Button)findViewById(R.id.btn_login);
error=(TextView)findViewById(R.id.tv_error);
macAddress = CustomHttpClient.getMacAddress(getBaseContext());
IPAddress = CustomHttpClient.getIP(getBaseContext());
version = CustomHttpClient.getAndroidVersion();
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("username", un.getText().toString()));
postParameters.add(new BasicNameValuePair("password", pw.getText().toString()));
postParameters.add(new BasicNameValuePair("MacAddress",macAddress.toString()));
postParameters.add(new BasicNameValuePair("IPAddress",IPAddress.toString()));
postParameters.add(new BasicNameValuePair("Version",version.toString()));
//String valid = "1";
String response = null;
try {
response = CustomHttpClient.executeHttpPost("http://192.168.1.7/thesis/check.php", postParameters);
String res=response.toString();
// res = res.trim();
res= res.replaceAll("\\s+","");
//error.setText(res);
if(res.equals("1")){
error.setTextColor(Color.GREEN);
error.setText("Correct Username or Password");
Toast.makeText(getApplicationContext(), "You Logged in ", Toast.LENGTH_LONG).show();
//Intent startMain = new Intent(Intent.ACTION_MAIN);
//startMain.addCategory(Intent.CATEGORY_HOME);
//startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(startMain);
Intent intent = new Intent();
intent.setClass(login2.this, Logout.class);
startActivity(intent);
}
else{
error.setText("Sorry!! Incorrect Username or Password");
Toast.makeText(getApplicationContext(), "Sorry, wrong Username/Password", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
}
}
});
}
}
Прежде всего вы должны взглянуть на асинхронные задачи в Android:
http://loopj.com/android-async-http/
И, как вы сказали «в андроид-студии постоянно говорят, что в php-файле есть синтаксическая ошибка», эта синтаксическая ошибка в вашем php-файле, и вы просто читаете ответное сообщение HTTP.
Кроме того, я рекомендую вам прочитать о веб-сервисах и их безопасной реализации. Не очень безопасно запрашивать число «1 или 0» и проверять этот ответ.
Безопасные веб-сервисы: REST через HTTPS против SOAP + WS-Security. Что лучше?
https://developer.android.com/training/articles/security-ssl.html
Других решений пока нет …