繁体   English   中英

如何使用android(PHP)连接到MySQL数据库?

[英]How can I connect to MySQL database with android (PHP)?

我已经尝试过有关此问题的几乎所有代码。

我在下面留下示例代码。

//select.php
         <?php
$host='127.0.0.1';
$uname='root';
$pwd='';
$db="android";
$id=$_REQUEST['id'];
$con = mysql_connect($host,$uname,$pwd) or die("connection failed");
$sqlString = "select * from sample where id='$id'  ";
$rs = mysql_query($sqlString);  
if($rs){
while($objRs = mysql_fetch_assoc($rs)){
$output[] = $objRs; }
echo json_encode($output); }
mysql_close($con);
?>

//主要活动

        @Override
        public void onClick(View v) {

        id=e_id.getText().toString();
        select();
        }
        });
        }

        public void select()    {
        ArrayList<NameValuePair> nameValuePairs = new 
        ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("id",id));

        try
        {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://10.0.2.2/select.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
        Log.e("pass 1", "connection success ");
        }
        catch(Exception e)
        {
        Log.e("Fail 1", e.toString());
        Toast.makeText(getApplicationContext(), "Invalid IP Address",
        Toast.LENGTH_LONG).show();
        }

        try
        {
        BufferedReader reader = new BufferedReader
        (new InputStreamReader(is,"iso-8859-1"),8);
        StringBuilder sb = new StringBuilder();
        while ((line = reader.readLine()) != null)
        {
        sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
        Log.e("pass 2", "connection success ");
        }
        catch(Exception e)
        {
        Log.e("Fail 2", e.toString());
        }

        try
        {
        JSONObject json_data = new JSONObject(result);
        name=(json_data.getString("name"));
        Toast.makeText(getBaseContext(), "Name : "+name,
        Toast.LENGTH_SHORT).show();
        }
        catch(Exception e)
        {
        Log.e("Fail 3", e.toString());
        }        }}

我写这个给。

 <uses-permission android:name="android.permission.INTERNET"/>  

// logcat的

   E/Fail 1: android.os.NetworkOnMainThreadException
 E/Fail 2: java.lang.NullPointerException: lock == null
 E/Fail 3: java.lang.NullPointerException

当我尝试运行该应用程序时,我收到INVALID IP ADDRESS错误。 我需要一些建议。 我应该如何尝试使用android(PHP)连接到MySQL数据库?

异常清楚地表明您正在主线程上调用网络操作,这就是它不起作用的原因。 使用异步任务进行网络操作,然后它将起作用。 从api级别11开始,android限制了主线程上的网络操作,如果执行此操作,则会在主线程异常上引发错误网络。 而且您也遇到了同样的例外。

@Developer_vaibhav我尝试了您所说的方式,但再次遇到错误。
mainactivity.class

public static final String USER_NAME = "USERNAME";

String username;
String password;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editTextUserName = (EditText) findViewById(R.id.editTextUserName);
    editTextPassword = (EditText) findViewById(R.id.editTextPassword);

}
public void invokeLogin(View view){
    username = editTextUserName.getText().toString();
    password = editTextPassword.getText().toString();

    login(username,password);

}

private void login(final String username, String password) {

    class LoginAsync extends AsyncTask<String, Void, String>{

        private Dialog loadingDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loadingDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Loading...");
        }

        @Override
        protected String doInBackground(String... params) {
            String uname = params[0];
            String pass = params[1];

            InputStream is = null;
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("username", uname));
            nameValuePairs.add(new BasicNameValuePair("password", pass));
            String result = null;

            try{
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(
                        "http://10.0.2.2/login.php");
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpClient.execute(httpPost);

                HttpEntity entity = response.getEntity();

                is = entity.getContent();

                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();

                String line = null;
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                result = sb.toString();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        protected void onPostExecute(String result){
            String s = result.trim();
            loadingDialog.dismiss();
            if(s.equalsIgnoreCase("success")){
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                intent.putExtra(USER_NAME, username);
                finish();
                startActivity(intent);
            }else {
                Toast.makeText(getApplicationContext(), "Invalid User Name or Password", Toast.LENGTH_LONG).show();
            }
        }
    }

    LoginAsync la = new LoginAsync();
    la.execute(username, password);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
   /* if (id == R.id.action_settings) {
        return true;
    }*/

    return super.onOptionsItemSelected(item);
}

@ user2508811我使用了mysqli。 //login.php

    <?php
    define('HOST','localhost');
    define('USER','root');
    define('PASS','root1234');
    define('DB','database');

    $con = mysqli_connect(HOST,USER,PASS,DB);

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

    $sql = "select * from users where username='$username' and 
    password='$password'";

    $res = mysqli_query($con,$sql);

    $check = mysqli_fetch_array($res);

    if(isset($check)){
    echo 'success';
    }else{
    echo 'failure';
    }

    mysqli_close($con);
    ?>

// logcat的

FATAL EXCEPTION: main

java.lang.NullPointerException
MainActivity$1LoginAsync.onPostExecute(MainActivity.java:118)
MainActivity$1LoginAsync.onPostExecute(MainActivity.java:64)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5319)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)

我在模拟器上运行该应用程序,当我单击该按钮时,我得到了停止该应用程序的错误。

类里面的方法? 我的天啊。 在隔离的.java文件中创建asynctask,然后调用“ new LoginAsync()。execute();”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM