2013-07-17 2 views
0

i'am новичок в программировании ... Я пытаюсь вызвать webservice с android. но у меня есть фатальная ошибка.фатальная ошибка: Destructor не может принимать аргументы

1.Это Android кодирования

public class UserFunction { 
    private JSONParser jsonParser; 

    private static String LoginURL="http://10.0.2.2/android/include/index.php"; 
    private static String RegisterURL="http://10.0.2.2/android/include/index.php"; 

    private static String login_tag="login"; 
    private static String register_tag="register"; 


    public UserFunction(){ 
     jsonParser=new JSONParser(); 
    } 


    public JSONObject loginUser(String email, String password){ 
     //building parameter 
     List<NameValuePair> params= new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("tag", login_tag)); 
     params.add(new BasicNameValuePair("email", email)); 
     params.add(new BasicNameValuePair("password", password)); 
     JSONObject json=jsonParser.getJSONFromUrl(LoginURL, params); 

     return json; 
    } 


    public JSONObject registerUser(String email, String name, String password){ 
     //building parameter 
     List<NameValuePair> params= new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("tag", login_tag)); 
     params.add(new BasicNameValuePair("name", name)); 
     params.add(new BasicNameValuePair("email", email)); 
     params.add(new BasicNameValuePair("password", password)); 
     //getting JSONObject 
     JSONObject json=jsonParser.getJSONFromUrl(RegisterURL, params); 

     return json; 
    } 


    public boolean isUserLoggedIn(Context context){ 
     DatabaseHandler db= new DatabaseHandler(context); 
     int count=db.getRowCount(); 
     if(count>0){ 
      return true; 
     } 
     return false; 
    } 


    public boolean logoutUser(Context context){ 
     DatabaseHandler db=new DatabaseHandler(context); 
     db.resetTable(); 
     return false; 
    } 
} 

2.Это index.php

if(isset($_POST['tag'])&& $_POST['tag'] !=''){ 
     //get tag 
     $tag=$_POST['tag']; 

     //include DB handler 
     require_once ('DB_Functions.php');//ganti include 
     $db=new DB_Functions(); 

     //response array 
     $response=array ("tag"=> $tag, "Success"=>0, "error"=>0); 

     //check 4 tag type 
     if($tag='login'){ 
      //req type is check login 
      $email=$_POST['email']; 
      $password=$_POST['password']; 

      //check 4 user 
      $user=$db->GetUserByEmailAndPassword($email, $password); 
      if($user !=false){ 
       /* user found 
       * echo JSON with Success =1 */ 
       $response ["Success"]=1; 
       $response["uid"]=$user["unique_id"]; 
       $response ["user"]["name"]=$user["name"]; 
       $response["user"]["email"]=$user["email"]; 
       $response ["user"]["created_at"]=$user["created_at"]; 
       $response["user"]["updated_at"]=$user["updated_at"]; 
       echo json_encode($response); 
      } 
      else{ 
       /* user not found 
       * echo JSON with error =1 */ 
       $response ["Error"]=1; 
       $response["error_msg"]="INCORRECT EMAIL OR PASSWORD!!!"; 
       echo json_encode($response); 
      } 
     } 
     else if($tag=='register'){ 
      //req type is register new user 
      $name=$_POST['name']; 
      $email=$_POST['email']; 
      $password=$_POST['password']; 

      //check if user already existed 
      if($db->IsUserExisted($email)){ 
       //user is already existed - error response 
       $response["error"]=2; 
       $response["error_msg"]="USER IS ALREADY EXISTS"; 
       echo json_encode($response); 
      } 
      else{ 
       //store user 
       $user=$db->StoreUser($name, $email, $password); 
       if($user){ 
        //user stored successfull 
        $response ["Success"]=1; 
        $response["uid"]=$user["unique_id"]; 
        $response ["user"]["name"]=$user["name"]; 
        $response["user"]["email"]=$user["email"]; 
        $response ["user"]["created_at"]=$user["created_at"]; 
        $response["user"]["updated_at"]=$user["updated_at"]; 
        echo json_encode($response); 
       } 
       else{ 
        //user failed to store 
        $response ["Error"]=1; 
        $response["error_msg"]="ERROR OCCURED IN REGISTRATION"; 
        echo json_encode($response); 
       } 
      } 
     } 
     else{ 
      echo "INVALID REQUEST"; 
     } 
    } 
    else{ 
     echo "ACCESS DENIED"; 
    } 
?> 

3. это DB_Functions.php

<?php 
    class DB_Functions{ 
     private $db; 
     /*constructor*/ 
     function __construct($db){ 
      require_once ('DB_Connect.php');//ganti include 
      /*connecting DB*/ 
      $this->db= new DB_Connect(); 
      $this->db->connect(); 
     } 
     /*destructor*/ 
     function __destruct($db){ 
     } 

     /* 
     *storing new user 
     *returning user detail 
     */ 

     public function StoreUser($name, $email, $password){ 
      $uuid= uniqid('',true); 
      $hash= $this->hashSSHA($password); 
      $encrypted_password= $hash["encrypted"]; //encripted password 
      $salt=$hash["salt"];//salt 
      $result=mysql_query("INSERT INTO account_users(unique_id, name, email, encrypted_password, salt, created_at) VALUES ('$uuid','$name','$email','$encrypted_password','$salt',NOW())"); 
      /*check for succesfull store*/ 
      if($result){ 
       /*get user detail*/ 
       $uid= mysql_insert_id(); 
       $result= mysql_query("SELECT * FROM account_users WHERE uid='$uid'"); 
       /*return user detail*/ 
       return mysql_fetch_array($result); 
      } 
      else{ 
       return false; 
      } 
     } 
     /* 
     *get user by email & password 
     */ 

     public function GetUserByEmailAndPassword($email, $password){ 
      $result=mysql_query("SELECT * FROM account_users WHERE email='$email'") or die (mysql_error()); 
      //check 4 result 
      $no_of_rows=mysql_num_rows($result); 
      if($no_of_rows>0){ 
       $result=mysql_fetch_array($result); 
       $salt=$result['salt']; 
       $encrypted_password=$result['encrypted_password']; 
       $hash=$this->checkhashSSHA($salt, $password); 
       //check pass equality 
       if($encrypted_password==$hash){ 
        //user auth are correct 
        return $result; 
       } 
      } 
      else{ 
       //user not found 
       return false; 
      } 
     } 

     /* 
     *check user existed or not 
     */ 
     public function IsUserExisted($email){ 
      $result=mysql_query("SELECT email FROM account_users WHERE email='$email'"); 
      $no_of_rows=mysql_num_rows($result); 
      if($no_of_rows>0){ 
       //user existed 
       return true; 
      } 
      else{ 
       //user not existed 
       return false; 
      } 
     } 
     /* 
     *encrypting pass 
     *@param pass 
     *return salt & encrpted pass 
     */ 
     public function hashSHHA($password){ 
      $salt=sha1(rand()); 
      $salt=substr($salt, 0, 10); 
      $encrypted= base64_encode(sha1($password.$salt, true).$salt); 
      $hash=array("salt"=> $salt, "encrypted"=> $encrypted); 
      return $hash(); 
     } 
     /* 
     *decrypting pass 
     *@param salt, pass 
     *return hash string 
     */ 
     public function CheckHashSSHA($salt, $password){ 
      $hash=base64_encode(sha1($password.$salt, true).$salt); 
      return $hash; 
     } 

    } 
?> 

4. и последнее это ошибка при запуске Android код

07-18 02:07:59.393: D/dalvikvm(541): GC_EXPLICIT freed 3420 objects/314064 bytes in 340ms 
07-18 02:08:08.802: E/JSON(541): <br />n<b>Fatal error</b>: Destructor DB_Functions::__destruct() cannot take arguments in <b>C:\xampp\htdocs\android\include\DB_Functions.php</b> on line <b>13</b><br />n 
07-18 02:08:08.802: E/JSON PARSER(541): Error parsing dataorg.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject 
07-18 02:08:08.802: W/System.err(541): java.lang.NullPointerException 
07-18 02:08:08.812: W/System.err(541): at com.androidTA.androidclient.RegisterActivity$1.onClick(RegisterActivity.java:58) 
07-18 02:08:08.812: W/System.err(541): at android.view.View.performClick(View.java:2408) 
07-18 02:08:08.812: W/System.err(541): at android.view.View$PerformClick.run(View.java:8816) 
07-18 02:08:08.812: W/System.err(541): at android.os.Handler.handleCallback(Handler.java:587) 
07-18 02:08:08.812: W/System.err(541): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-18 02:08:08.812: W/System.err(541): at android.os.Looper.loop(Looper.java:123) 
07-18 02:08:08.812: W/System.err(541): at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-18 02:08:08.822: W/System.err(541): at java.lang.reflect.Method.invokeNative(Native Method) 
07-18 02:08:08.858: W/System.err(541): at java.lang.reflect.Method.invoke(Method.java:521) 
07-18 02:08:08.858: W/System.err(541): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-18 02:08:08.858: W/System.err(541): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-18 02:08:08.862: W/System.err(541): at dalvik.system.NativeStart.main(Native Method) 

я имею проблему с функцией самоуничтожения ..., пожалуйста, кто-нибудь помочь мне решить эту проблему ..., очень большой спасибо за ваше решение ,,, :)

+0

У вас есть сообщение об ошибке с файлом и строками, вы разместили код этого файла и упомянутый ошибка есть на этой линии. Вы пытались понять, что означает эта ошибка? –

+0

на мой взгляд, эта ошибка означает, что функция destruct не может выполняться в DB_Functions.php, это правда? исправьте меня, если это неверно :) –

+0

Частично верно. Прежде чем это может быть выполнено, объект должен быть создан, и он не может быть создан из-за неправильного объявления метода в классе. Решение этого было предложено ниже, но у вас есть другая ошибка в классе «DB_Connect». Пожалуйста, попробуйте узнать что-то об ООП на PHP, прежде чем спрашивать. –

ответ

0

Просто снимите параметр $ db от вашего деструктора. Это должно выглядеть так.

/*destructor*/ 
function __destruct(){ 
} 

Если вам необходимо получить доступ к базе данных из деструктора, вы всегда можете использовать $this->db, так как вы уже инициализированы, что в конструкторе.

Кроме того, вы должны действительно удалить параметр $db из конструктора. Он не используется, и вы не передаете никаких аргументов при создании объекта DB_functions в index.php.

+0

, но .. если я удалю этот параметр ..., эта ошибка произошла 07-18 02: 37: 57.423: E/JSON (696):
n Неустранимая ошибка: Не абстрактный метод DB_Connect :: __ construct() должен содержать тело в C: \ xampp \ htdocs \ android \ include \ DB_Connect.PHP на линии
п :( –

+0

@adhit_yogapratama Обновленный мой ответ - вы должны удалить параметр $ дб из конструктора, а –

+0

спасибо @James Holderness ..., наконец, что ошибка была исправлена ​​:) –

2

Удалить все параметры $ db из параметров вашего конструктора/деструктора. Как так:

function __construct(){ 
     require_once ('DB_Connect.php');//ganti include 
     /*connecting DB*/ 
     $this->db= new DB_Connect(); 
     $this->db->connect(); 
    } 

Вам не нужно $ дб в списке параметров, как вы ссылки на $ this-> дб, так что это не требуется.

function __destruct(){ 
    } 

Вы не должны передавать какие-либо другие параметры, как объект очищается полностью

+0

это. ошибка 07-18 02: 37: 57.423: E/JSON (696):
n Неустранимая ошибка: Не абстрактный метод DB_Connect :: __ construct() должен содержать тело в C: \ xampp \ htdocs \ android \ include \ DB_Connect.php on line
n , когда я удаляю этот параметр :( –

+0

Да, потому что вам тоже нужно удалить $ db из конструктора. Это будет хорошо, потому что yo ссылаемся на это на $ this-> db. Таким образом, $ db в списке параметров не требуется. – LokiSinclair

+0

спасибо @James Holderness ..., наконец, эта ошибка была исправлена ​​:) –