2013-05-27 46 views
3

我開發了一個android應用程序,當我在真實設備上運行應用程序時遇到問題。在模擬器上一切正常。 當活動開始時,我填寫用戶名和密碼,然後按登錄按鈕。沒有任何反應,2-3分鐘後我有錯誤發生。當我試圖在真實設備上運行日誌時發生錯誤(作品在模擬器上完美)

這是LogInActivity.java

package com.example.movenialapplication; 

import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class LogInActivity extends Activity{ 

IpString ipStr = new IpString(); 
static String ip = IpString.ipAdress; 
private static String url_logIn = "http://"+ip+"/android_nydor/login3.php"; 
Button btnForLogIn; 
JSONParser jsonParser = new JSONParser(); 
String username,password; 
EditText usernameTxt; 
EditText passwordTxt; 

private static final String TAG_SUCCESS = "success"; 
private static final String TAG_USERS = "users"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.log_in); 
    btnForLogIn = (Button) findViewById(R.id.LogInButton); 
    btnForLogIn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      usernameTxt =(EditText) findViewById(R.id.username); 
      passwordTxt =(EditText) findViewById(R.id.password); 
      username = usernameTxt.getText().toString(); 
      password = passwordTxt.getText().toString(); 
      int success; 
      try { 
       // Building Parameters 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("username", username)); 
       params.add(new BasicNameValuePair("password", password)); 
       // getting product details by making HTTP request 
       // Note that product details url will use GET request 

       //StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
       //StrictMode.setThreadPolicy(policy); 

       JSONObject json = jsonParser.makeHttpRequest(url_logIn, "GET", params); 
       //Log.i("jsonOb", json.toString()); 

       // json success tag 
       success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
        // Starting new intent 
        Intent in = new Intent(getApplicationContext(), 
          AllFromMovenialActivity.class); 
        // sending pid to next activity 
        //in.putExtra(TAG_ID, movenialID); 

        // starting new activity and expecting some response back 
        startActivityForResult(in, 100); 
       } 
       else{ 
        usernameTxt.setText("") ; 
        passwordTxt.setText("") ; 
        TextView t = (TextView)findViewById(R.id.WrongPassword); 
        t.setVisibility(View.VISIBLE); 
       } 
      } 
      catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

} 

這裏是PHP代碼:

<?php 
//opening connection link 
$link_fetch_data = mysql_connect('localhost:3306', 'root', 'pass'); 

$username=$_GET['username']; 
$password=$_GET['password']; 

if (!$link_fetch_data) { 
    die('Could not connect: ' . mysql_error()); 
} 
//selecting db from server 
mysql_select_db("sccm_nydor", $link_fetch_data); 

$q=mysql_query("SELECT idusers FROM users WHERE username='".$_GET['username']."' AND password = SHA1(CONCAT('".$_GET['username']."','".$_GET['password']."')) AND active=1"); 

if (!empty($q)) { 
     // check for empty result 
     if (mysql_num_rows($q) > 0) { 

      $q = mysql_fetch_array($q); 

      $movenial_users = array(); 

      $movenial_users["idusers"]=$q["idusers"]; 

      // success 
      $response["success"] = 1; 

      // user node 
      $response["movenial_users"] = array(); 

      array_push($response["movenial_users"], $movenial_users); 

      // echoing JSON response 
      echo json_encode($response); 
     } 
     else { 
      // no product found 
      $response["success"] = 0; 
      $response["message"] = "No contents found"; 

      // echo no users JSON 
      echo json_encode($response); 
     }  
} 
else { 
    // required field is missing 
    $response["success"] = 0; 
    $response["message"] = "Required field(s) is missing"; 

    // echoing JSON response 
    echo json_encode($response); 
} 

mysql_close($link_fetch_data);   
?> 

這是日誌:

05-15 13:56:18.075: E/Buffer Error(7588): Error converting result java.lang.NullPointerException 
05-15 13:56:18.075: E/JSON Parser(7588): Error parsing data org.json.JSONException: End of input at character 0 of 
05-15 13:56:18.085: E/AndroidRuntime(7588): FATAL EXCEPTION: main 
05-15 13:56:18.085: E/AndroidRuntime(7588): java.lang.NullPointerException 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at com.example.movenialapplication.LogInActivity$1.onClick(LogInActivity.java:65) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at android.view.View.performClick(View.java:3538) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at android.view.View$PerformClick.run(View.java:14330) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at android.os.Handler.handleCallback(Handler.java:608) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at android.os.Looper.loop(Looper.java:156) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at android.app.ActivityThread.main(ActivityThread.java:4987) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-15 13:56:18.085: E/AndroidRuntime(7588):  at dalvik.system.NativeStart.main(Native Method) 

回答

1

檢查你的真實設備是否連接到與PC相同的網絡,如果您的PHP腳本位於您的PC上,則Real Device的IP地址必須是s和PC一起。

希望這會有所幫助,祝你好運^^

+0

感謝您的答覆。我的設備連接到同一網絡。並且php腳本位於我的電腦上,我用xampp運行它。你現在可以幫助我多嗎? – mantsap

0

看你的代碼,我懷疑你的問題在這裏:

IpString ipStr = new IpString(); 
static String ip = IpString.ipAdress; 

什麼是ip價值?我不熟悉類IpString,但我懷疑它在模擬器上返回10.0.2.2或主機的實際IP地址,這是我認爲您的服務器正在運行的設備。但是,在真實設備上,IP地址肯定不是您服務器的地址,因此jsonParser.makeHttpRequest(url_logIn, "GET", params)調用將失敗。具體來說,我懷疑JSONObject json爲空,給你在你的LogCat中報告的空指針異常。

+0

IpString是類,從那裏我改變了IP地址!那裏沒有錯!我只是動態解析ip。 – mantsap

+0

@mantsap:你檢查過報告的IP地址嗎?您的回覆向我建議您未檢查物理設備上的值。順便說一下,你能從物理設備上的瀏覽器訪問你的服務器嗎? –

+0

我檢查了它,我無法從手機瀏覽器訪問我的服務器。 (192.168.1.5/....) – mantsap

相關問題