Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从Android发送到php webservice以验证登录_Android_Json_Web Services_Android Asynctask - Fatal编程技术网

将数据从Android发送到php webservice以验证登录

将数据从Android发送到php webservice以验证登录,android,json,web-services,android-asynctask,Android,Json,Web Services,Android Asynctask,我有一个login.php脚本,它将验证在android中输入的用户名和密码。代码如下 <?php include('dbconnect.php'); $data=file_get_contents('php://input'); $json = json_decode($data); $tablename = "users"; //username and password sent from android $username=$

我有一个login.php脚本,它将验证在android中输入的用户名和密码。代码如下

<?php

    include('dbconnect.php'); 

    $data=file_get_contents('php://input');
    $json = json_decode($data);
    $tablename = "users";

    //username and password sent from android
    $username=$json->{'username'};
    $password=$json->{'password'};

    //protecting mysql injection
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);
    $password = md5($password);

    $sql = "SELECT id FROM $tablename WHERE u_username='$username' and password='$password'"; 

    //Querying the database
    $result=mysql_query($sql);

    //If found, number of rows must be 1
    if((mysql_num_rows($result))==1){

    //creating session
    session_register("$username");
    session_register("$password");

    print "success";
    }else{
    print "Incorrect details";
    }
?>
我得到以下错误:error/AndroidRuntime(29611):致命异常:main android.os.NetworkOnMainThreadException。 我知道我需要另一个线程,我正在考虑使用AsyncTask,但我不知道在这个类中放在哪里

您还可以给我一些关于使用JSON从android发送和接收数据的建议吗


感谢您的帮助,

您可以使用AsyncTask更改代码,方法是在
doInBackground
中调用login方法,并在登录成功时在
onPostExecute
上启动下一个活动:

private class LoginOperation extends AsyncTask<String, Void, String> {

String str_username=;
String str_password=;

     public LoginOperation(String str_username,String str_password){
      this.str_password=  str_password;
      this.str_username=  str_username;
     }
     @Override
      protected void onPreExecute() {

       // show progress bar here
      }
      @Override
      protected String doInBackground(String... params) {
           // call login method here
         String userID=login(str_username,str_password);
         return userID;
      }      

      @Override
      protected void onPostExecute(String result) {    
         // start next Activity here
           if(result !=null){
                Intent casesActivity = new Intent(getApplicationContext(),
                                                CasesActivity.class);
                casesActivity.putExtra("username", result);
                Your_Activiy.this.startActivity(casesActivity);

               }
      }

简单的答案是创建一个线程,只调用该线程中的登录名或异步任务(您可以将其定义为一个新类,只需调用execute)。像这样:

旧代码:

userID=login(editTextUsername.getText().toString(), editTextPassword.getText().toString());
新代码:

 Runnable runnable = new Runnable() {
      void run() {
         login(editTextUsername.getText().toString(), editTextPassword.getText().toString());
      }
 (new Thread(runnable)).start();

当我学习时,我发现这非常有用:谢谢你,这解决了我的错误。我在JSON解析方面仍然存在一些问题。我会做一些研究,并试图找到一个解决方案。谢谢
userID=login(editTextUsername.getText().toString(), editTextPassword.getText().toString());
 Runnable runnable = new Runnable() {
      void run() {
         login(editTextUsername.getText().toString(), editTextPassword.getText().toString());
      }
 (new Thread(runnable)).start();