ANDROID - 无法从Android设备中的localhost连接数据库

时间:2015-01-07 15:44:06

标签: android json localhost device

我的代码在 Android模拟器中运行。我可以从localhost连接到数据库...

但是当我在 Android设备中运行时。该应用运行不正常..

您是否可以为从localhost到Android设备的连接数据库提供参考?我在谷歌搜索过,但我没有得到它。

    public class Login extends Activity implements View.OnTouchListener {

    EditText usernameInput, passwordInput;
    Button loginButton;
    String username, password;
    ProgressDialog pDialog;
    JSONParser jsonParser = new JSONParser();
    TextView createAccountLink;
    private static String login_url = "http://10.0.2.2/ujian_online/login.php";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "products";
    ArrayList<HashMap<String, String>> arraylist;
    JSONArray products = null;
    String image_link;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        usernameInput = (EditText) findViewById(R.id.username);
        passwordInput = (EditText) findViewById(R.id.password);
        loginButton = (Button) findViewById(R.id.login_button);
        jsonParser = new JSONParser();
        createAccountLink = (TextView) findViewById(R.id.createAccountLabel);
        createAccountLink.setOnTouchListener(this);
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new CheckAccounts().execute();
            }
        });
        //HANCURIN SESSION
    }

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
      if(v.getId() == R.id.createAccountLabel) {
          Intent i = new Intent(getApplicationContext(), Registration.class);
          startActivity(i);
          finish();
      }
      return true; 
    }

    public class CheckAccounts extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("System checks your account.....");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {
            username = usernameInput.getText().toString();
            password = passwordInput.getText().toString();
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("username", username));
            params.add(new BasicNameValuePair("password", password));
            JSONObject json = jsonParser.makeHttpRequest(login_url, "POST", params);

            try {
                int success = json.getInt("success");
                Log.d("SUKSES", String.valueOf(success));
                int id = 0;
                if (success == 1) {
                    products = json.getJSONArray(TAG_PRODUCTS);
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);
                         id = c.getInt("id");
                    }   
                    new SessionManagement(getApplicationContext()).putInteger("ID", id);
                    Intent i = new Intent(getApplicationContext(), MainMenu.class);
                    startActivity(i);
                    finish();
                } else {
                    pDialog.setMessage("Your username or password is wrong");
                    pDialog.show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        protected void onPostExecute(String file_url) {
            pDialog.dismiss();
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您正在使用10.0.2.2,它是模拟器的特殊网址,仅指向计算机localhost。对于真实设备,请使用本机的实际IP地址并在同一网络上。

您使用的网址只能在模拟器中使用。

像这样使用

private static String login_url = "http://real_ip_of_your_machine/ujian_online/login.php";

使用ipconfig(Windows)或ifconfig(Linux / Mac)获取机器的ip。此外,您的机器和设备应位于同一网络上。