正如标题所示,只想从我的php文件中获取数据&检查输入的电子邮件、密码是否为注册用户。如果是,则重定向到成功页面(TimelineActivity)
因此,我们看了一下:-如何在android 中使用php脚本从mysql数据库中获取值
这是我的LoginBasicActivity.java
public class LoginBasicActivity extends AppCompatActivity {
public AutoCompleteTextView uemail;
public EditText upassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_basic);
uemail = (AutoCompleteTextView) findViewById(R.id.emailBasic);
upassword = (EditText) findViewById(R.id.passwordBasic) ;
Button buttonLog = (Button) findViewById(R.id.buttonLog);
buttonLog.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String tem;
String email = uemail.getText().toString();
String result = null;
String password = upassword.getText().toString() ;
// HttpClientBuilder.create();
// As HttpClient client = new DefaultHttpClient(); is not used anymore
HttpClient client = HttpClients.createDefault();
tem = "http://www.example_domain.com/app_folder/verify-user.php?username="+email+"&password="+password;
HttpGet request = new HttpGet(tem);
try {
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
result = reader.readLine();
} catch (Exception e) {
e.printStackTrace();
}
if (result.equals("0") == true) {
Toast.makeText(getApplicationContext(), "Sorry try again", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Welcome Client", Toast.LENGTH_LONG).show();
Intent myIntt = new Intent(view.getContext(), TimelineActivity.class);
startActivityForResult(myIntt, 0);
}
}
});
}
}
这是verify-user.php
<?php
mysql_connect("localhost","user_name","user_password") or die(mysql_error());
mysql_select_db("db_name") or die(mysql_error());
$username=$_REQUEST['username'];
$password=$_REQUEST['password'];
$SelectQuery="select * from table_name where C_Username='$username' and C_Password='$password'";
$result=mysql_query($SelectQuery) or die(mysql_error());
$count=mysql_num_rows($result);
$row=mysql_fetch_array($result);
if($count==0)
echo "0";
else
echo $row['c_id'];
?>
在这之后,我在build.gradle中遇到了一些文件复制问题,所以在build.gradle 中添加了这个
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
}
}`
现在,当按下登录按钮时,对话框显示"不幸的app_name已停止"
Logcat:-https://www.dropbox.com/s/63cv806z4y8h9my/2015-11-10-05-01-44%5B1%5D.txt?dl=0
我对安卓Java有点陌生。
如何解决此问题?有人能解释一下正确的语法吗?哪里出了问题?
您正在通过主线程发出网络(api)请求,这导致了问题。使api从线程命中,或者为其使用AsyncTask或Loader。还要检查您是否已将internet权限添加到清单文件中。如果没有,请在清单文件中添加以下行。
<uses-permission android:name="android.permission.INTERNET"/>
编辑:您可以在活动中创建一个内部类,如下所示,并使用new LoginAsyncTask().execute()在按钮点击时调用它;
公共类LoginAsyncTask扩展AsyncTask<Void,Void,String>protected字符串doInBackground(Void…params){//在后台线程中运行(无法访问UI,也无法在此处执行与UI相关的操作)。//让你的网络点击这里,并返回结果,在你的情况下是字符串。//onPostExecute方法在该方法返回后自动调用。。。。}受保护的void on PreExecute(){//在主线程上运行(可以访问UI)//如果需要的话,在网络接入之前在这里进行一些初始化。。。。}protected void onPostExecute(字符串结果){//方法在主线程上运行,可以访问UI。result是doInBackground方法返回的值。//对结果进行检查,并相应地执行下一步操作。。。。。。}}