在免费的webhost中将android连接到服务器

时间:2015-07-24 04:29:30

标签: php android mysql

我可以将免费的webhost连接到Android服务器(www.000webhost.com),并在android和mysql数据库和php之间发送数据吗?

如果是这样,有人可以给我一些教程吗?

1 个答案:

答案 0 :(得分:5)

是的,您可以在获取数据时遇到小问题,例如

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();
}
?>

我的输出:

{"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 -->

免费主机在输出中显示脚本的问题很小。您必须删除输出中的脚本,其余部分将存储在变量中,然后使用此变量从JSON获取数据。

首先,大多数人会删除此代码:

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

例如,我使用GetData()从PHP文件中获取数据并删除其他代码:

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();
}

现在,您可以从myJSON变量

中提取数据

myJSON:

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

从php获取数据并在listview中显示的完整代码:

首先,您需要将<uses-permission android:name="android.permission.INTERNET" />添加到 AndroidManifest.xml 以进行连接互联网。

的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>

然后将list_item.xml添加到项目中:

<?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>

并将listview添加到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>

现在在MainActivity.java获取GetData()的数据,并使用ShowNameList()向ListView显示数据。

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();
        }

    }
}

照片:

use Free host

要将数据发送到MySQL,首先要使用PHP代码将数据插入MySQL。

(»我添加消息以显示应用中发生的事情)

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();
}
?> 

在MySQL中创建表

»因为我们只是发送名称,所以在phpMyAdmin中id应为AUTO_INCREMENT

SQL

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

mysql

然后制作新的活动并添加EditTextButton

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();
    }
}

照片:

MySQL