Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết nối android với máy chủ trong webhost miễn phí

Có, bạn có thể gặp vấn đề nhỏ về lấy dữ liệu, chẳng hạn như

PHP:

<?php
header("Content-type: application/json; charset=utf-8");
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
$hostname='mysql2.000webhost.com';
$username='a3067857_admin';
$password='xxxxxxxxx';
$response = array();
try {

    $dbh=new PDO("mysql:host=$hostname;dbname=a7769372_db",$username  ,$password);

    $response["allname"] = array();

    /*** QUERY ****/
    $sql='SELECT * FROM my_table';

    $stmt=$dbh->query($sql);

    $objs = $stmt->fetchAll(PDO::FETCH_OBJ);

    foreach($objs as $object) {
        $news = array();        
        $news["id"]=$object->id;
        $news["Name"]=$object->name;

        array_push($response["allname"], $news);
    }

    echo json_encode($response);

    /*** close connection ***/
    $dbh=null;

}catch(PDOException $e) {
 echo $e->getMessage();
}
?>

Đầu ra của tôi:

{"allname":[{"id":"1","Name":"sadegh"},{"id":"2","Name":"saleh"}]}
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->

Máy chủ miễn phí có một vấn đề nhỏ là nó hiển thị một tập lệnh ở đầu ra. Bạn phải xóa tập lệnh trong đầu ra và phần còn lại sẽ được lưu trữ trong một biến, sau đó sử dụng biến này để lấy dữ liệu từ JSON.

Đầu tiên, hầu hết mọi người sẽ xóa mã này:

<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->

Ví dụ:tôi sử dụng GetData () để lấy dữ liệu từ tệp PHP và xóa mã bổ sung:

public void GetData(){
    class GetDataJSON extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
            HttpPost httppost = new HttpPost("http://sheikhoo.net46.net/getname.php");
            Log.i("LOG", "HttpPost -> getname.php");
            // Depends on your web service
            httppost.setHeader("Content-type", "application/json");

            InputStream inputStream = null;
            String result = null;
            Log.i("LOG", inputStream + "," + result);
            try {
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();

                inputStream = entity.getContent();
                // json is UTF-8 by default
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();

                String line = null;
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                result = sb.toString();
                Log.i("LOG", result);
            } catch (Exception e) {
                // Oops
                Log.i("LOG", " error ");
            }
            finally {
                try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
            }
            Log.i("LOG", " result: " + result);
            /*****************remove script***********************/
            String s = result;
            int position = s.indexOf("}]}"); 

            s=s.substring(0, position + 3);
            /****************************************************/
            return s;
        }

        @Override
        protected void onPostExecute(String result){
            Log.i("LOG", " onPostExecute -> " + result );
            myJSON=result;
            Log.i("LOG", "myJSON" + myJSON);
        }
    }
    GetDataJSON g = new GetDataJSON();
    Log.i("LOG", " GetDataJSON " );
    g.execute();
}

Giờ đây, bạn có thể trích xuất dữ liệu từ myJSON biến

myJSON:

{"allname":[{"id":"1","Name":"sadegh"},{"id":"2","Name":"saleh"}]}

Mã đầy đủ để lấy dữ liệu từ php và hiển thị trong listview:

Đầu tiên, bạn cần thêm <uses-permission android:name="android.permission.INTERNET" /> tới AndroidManifest.xml để kết nối internet.

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ir.sheikhoo.freehost"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Sau đó, thêm list_item.xml dự án:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

và thêm listview vào activity_main.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ir.sheikhoo.freehost.MainActivity" >


    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" >
    </ListView>

</RelativeLayout>

Hiện có trong MainActivity.java lấy dữ liệu bằng GetData() và hiển thị dữ liệu cho ListView bằng ShowNameList() .

public class MainActivity extends ActionBarActivity {

    String myJSON;

    private static final String TAG_ALLNAME="allname";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "Name";

    JSONArray jname = null;

    ArrayList<HashMap<String, String>> nameList;

    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("LOG", "Start <-- ");
        list = (ListView) findViewById(R.id.listView);
        nameList = new ArrayList<HashMap<String,String>>();
        Log.i("LOG", "GetData <-- ");

        GetData();
    }

    public void GetData(){
        class GetDataJSON extends AsyncTask<String, Void, String>{

            @Override
            protected String doInBackground(String... params) {
                DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
                HttpPost httppost = new HttpPost("http://sheikhoo.net46.net/getname.php");
                Log.i("LOG", "HttpPost -> getname.php");
                // Depends on your web service
                httppost.setHeader("Content-type", "application/json");

                InputStream inputStream = null;
                String result = null;
                Log.i("LOG", inputStream + "," + result);
                try {
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();

                    inputStream = entity.getContent();
                    // json is UTF-8 by default
                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                    StringBuilder sb = new StringBuilder();

                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }
                    result = sb.toString();
                    Log.i("LOG", result);
                } catch (Exception e) {
                    // Oops
                    Log.i("LOG", " error ");
                }
                finally {
                    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
                }
                Log.i("LOG", " result: " + result);
                /*****************remove script***********************/
                String s = result;
                int position = s.indexOf("}]}"); 

                s=s.substring(0, position + 3);
                /****************************************************/
                return s;
            }

            @Override
            protected void onPostExecute(String result){
                Log.i("LOG", " onPostExecute -> " + result );
                myJSON=result;
                Log.i("LOG", "myJSON" + myJSON);
                //
                ShowNameList();
            }
        }
        GetDataJSON g = new GetDataJSON();
        Log.i("LOG", " GetDataJSON " );
        g.execute();
    }

    protected void ShowNameList(){
        try {
            Log.i("LOG", " showList " );
            //if(myJSON!=null){
                JSONObject jsonObj = new JSONObject(myJSON);
                jname = jsonObj.getJSONArray(TAG_ALLNAME);

                for(int i=0;i<jname.length();i++){
                    JSONObject c = jname.getJSONObject(i);
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);

                    Log.i("Ekhteraat app ControlPanel", id);

                    HashMap<String,String> lname = new HashMap<String,String>();

                    lname.put(TAG_ID,id);
                    lname.put(TAG_NAME,name);

                    nameList.add(lname);
                //}

                    Log.i("LOG", "Name -> " + id + " " +  name);
                    //setNewNews;
                    ;

                    ListAdapter adapter = new SimpleAdapter(
                            MainActivity.this, nameList, R.layout.list_item,
                            new String[]{TAG_ID,TAG_NAME},
                            new int[]{R.id.id, R.id.name}
                    );
                    list.setAdapter(adapter);
                }


        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}

Hình ảnh:

Để gửi dữ liệu đến MySQL, trước tiên hãy tạo mã PHP để chèn dữ liệu vào MySQL.

(»Tôi thêm thông báo để hiển thị những gì xảy ra trong ứng dụng)

PHP:

<?php
header("Content-type: application/json; charset=utf-8");
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');

$hostname='mysql2.000webhost.com';
$username='a3067857_admin';
$password='xxxxxxxxx';

try {

    $dbh=new PDO("mysql:host=$hostname;dbname=a7769372_db;charset=utf8mb4",$username,$password);


    /*** QUERY ****/

    $statement = $dbh->prepare("INSERT INTO a7769372_db.my_table (name) VALUES (:Name);");

    if ($statement->execute(array(':Name' => $_POST['Name']))) {
        echo "executed";
    } else {
        echo "not executed";
    }

    /*** close connection ***/
    $dbh=null;

}catch(PDOException $e) {
 echo $e->getMessage();
}
?> 

Tạo bảng trong MySQL

» bởi vì chúng tôi chỉ gửi tên, vì vậy id phải là AUTO_INCREMENT trong phpMyAdmin.

SQL

CREATE TABLE my_table
(
    id int NOT NULL AUTO_INCREMENT,
    name varchar(255) NOT NULL,
    PRIMARY KEY (id)
)

sau đó tạo Hoạt động mới và thêm EditText , Nút Button

activity_send.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ir.sheikhoo.freehost.SendActivity" >

    <EditText
        android:id="@+id/Name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/textView1"
        android:layout_marginLeft="14dp"
        android:layout_toRightOf="@+id/textView1"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Name :" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/Name"
        android:layout_marginTop="21dp"
        android:text="Send" />

</RelativeLayout>

SendActivity.java:

public class SendActivity extends ActionBarActivity {

    EditText ed_name;

    String myJSON;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send);

        ed_name=(EditText) findViewById(R.id.Name);
        Button btn=(Button) findViewById(R.id.button1);

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(!ed_name.getText().toString().matches("")){
                    SendData();
                }else{
                    Toast.makeText(getBaseContext(),"Name NULL",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    public void SendData(){
        class GetDataJSON extends AsyncTask<String, Void, String>{

            private ProgressDialog Dialog;
            private InputStream is = null;
            private String url = "http://sheikhoo.net46.net/sendname.php";
            private String page_output = "";

            @Override
            protected void onPreExecute(){
                super.onPreExecute();
                Dialog = new ProgressDialog(SendActivity.this);
                Dialog.setTitle("Contacting Servers");
                Dialog.setMessage("Logging in ...");
                Dialog.setIndeterminate(false);
                Dialog.setCancelable(true);
                Dialog.show();
            }

            @Override
            protected String doInBackground(String... args) {

                try {
                        // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("Name", ed_name.getText().toString()));
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                Toast.makeText(getBaseContext(),"Error To Connect",
                    Toast.LENGTH_SHORT).show();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                Toast.makeText(getBaseContext(),"Error To Connect",
                    Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getBaseContext(),"Error To Connect",
                    Toast.LENGTH_SHORT).show();
            }
            try {
                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");
                }
                is.close();
                page_output = sb.toString();

                Log.i("LOG", "page_output --> " + page_output); ///<--------------------------|
            /*****************remove script***********************/
            String s = page_output;
            int position = s.indexOf("<"); 

            s=s.substring(0, position - 1);

            page_output=s;
            /****************************************************/
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
                Toast.makeText(getBaseContext(),"Buffer Error",
                    Toast.LENGTH_SHORT).show();
            }

            return page_output;
        }

            @Override
            protected void onPostExecute(String result){
                Dialog.dismiss();

                Log.i("LOG", " onPostExecute -> " + result );
                myJSON=result;
                Log.i("LOG", "myJSON" + myJSON);

                if(myJSON.trim().equals("executed")){
                    Toast.makeText(getBaseContext(),"Name Save in DB",
                        Toast.LENGTH_SHORT).show();
                    ed_name.setText("");
                }else{
                    Toast.makeText(getBaseContext(),"Error Name don't Save in DB",
                        Toast.LENGTH_SHORT).show();
            }
            }
        }
        GetDataJSON g = new GetDataJSON();
        Log.i("LOG", " GetDataJSON " );
        g.execute();
    }
}

Hình ảnh:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khái niệm cơ bản về hệ thống ghi nhớ tôi

  2. Truy vấn chậm MySQL - Đang chờ khóa bộ nhớ cache truy vấn

  3. Chuyển đổi dấu thời gian thành một ngày có thể đọc được trong khi truy vấn

  4. Sử dụng IS NULL và COALESCE trong OrderBy Doctrine Querybuilder

  5. MySQL Chọn các giá trị riêng biệt từ 2 cột