我可以将Android应用程序中,如免费的虚拟主机提供商连接到服务器(www.000webhost.com)和Android和MySQL数据库和PHP之间发送数据?
Can I connect an android app to server in free webhost like (www.000webhost.com) and send data between android and mysql database and php?
如果是这样,任何人都可以给我一些教程这样做呢?
If so, can anyone give me some tutorial to do this?
是的,你可以,但对获取数据的小问题,例如:
Yes, you can but have small problem for get data,for example
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获取数据。
Free hosts have small problem it show a script in output. You must remove the script in output and the remaining part will be stored in a variable then use this variable to get data from JSON.
一是大多数人会删除此code:
First most people will remove this code:
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->
例如,我使用的GetData()来获得PHP文件中的数据和删除附加code:
For example, I use GetData() to get data from PHP file and remove the additional code:
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
可变数据
Now you can extract data from myJSON
variable
myJSON:
{"allname":[{"id":"1","Name":"sadegh"},{"id":"2","Name":"saleh"}]}
全部code获取列表视图中,从PHP和显示数据:
Full code to get data from php and show in listview:
首先,你需要添加&LT;使用许可权的android:NAME =android.permission.INTERNET对/&GT;
为的AndroidManifest.xml 用于连接互联网。
First you need add <uses-permission android:name="android.permission.INTERNET" />
to AndroidManifest.xml for connect 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>
和列表视图添加到 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()
。
Now in MainActivity.java
get data with GetData()
and show data to ListView with 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();
}
}
}
图:
有关发送数据到MySQL,首先要PHP code将数据插入到MySQL。
For send data to MySQL, first make PHP code to insert data to MySQL.
(»我添加消息,以显示应用程序发生什么)
(» i add message to show what happen in app)
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中创建表
Create table in MySQL
»,因为我们只是给的名字,所以ID应该是 AUTO_INCREMENT
在phpMyAdmin。
» because we just send name, so id should be AUTO_INCREMENT
in phpMyAdmin.
SQL
CREATE TABLE my_table
(
id int NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
)
然后进行新的活动,并添加的EditText
,按钮
then make new Activity and add EditText
,Button
activity_send.xml:
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:
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();
}
}
图:
上一篇:与寻找下一个字的RichTextBox的问题下一、个字、问题、RichTextBox
下一篇:得到一个GridView和DropDownList的导航离开和返回按钮的ScriptManager后,记住他们的状态他们的、按钮、状态、GridView