我是android应用程序开发的新手。我给了一个任务来开发一个可以通过 PHP 连接到 PostgreSQL 的 android 项目,该数据库不是本地主机。你们可以帮助我如何进行连接。
问问题
1808 次
1 回答
1
SO中有很多关于PHP与Android应用程序集成的帖子。您想搜索 Android JSON。这就是我能够将我的应用程序链接到网络上的 MySQL 数据库的方式。PostqreSQL 应该没有什么不同,除了 PHP 查询调用。
您需要做的是编写一个连接到您的 PSQL 数据库并在其上运行查询的 PHP 程序。然后需要将查询格式化为 JSON 数组。下面的示例连接到 mysql 数据库。由于我从未使用过 PostgreSQL,我不确定要查询它的 PHP 代码是什么。不过,您应该能够在 PHP.net 上找到该信息。
<?php
$db = mysql_connect('localhost','mydatabase', 'mypassword');
mysql_select_db("myDB");
$TABLE = isset($_POST["table"]) ? $_POST["table"] : "rep_table";
$q = mysql_query("SELECT * FROM " . $TABLE);
while($row=mysql_fetch_assoc($q)) {
$result[]=$row;
}
print(json_encode($result));
mysql_close();
?>
然后,您的应用程序将通过 JSON 接口调用此 PHP 文件,然后您可以解析并从中获取值。
public class JSONHelper {
static ArrayList<NameValuePair> mArray = new ArrayList<NameValuePair>();
private static final String TAG = "JSONUpdater";
public String getJSONResult(String url) {
String result = "";
InputStream is = null;
try {
HttpClient httpclient = new DefaultHttpClient();
Log.d(TAG, "Client set");
HttpPost httpPost = new HttpPost(url);
Log.d(TAG, "Post set");
if (!mArray.isEmpty()) {
Log.d(TAG, "mArray is not empty!");
httpPost.setEntity(new UrlEncodedFormEntity(mArray));
} else {
Log.d(TAG, "mArray is SO empty!!");
}
HttpResponse response = httpclient.execute(httpPost);
Log.d(TAG, "response executed");
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch(Exception e) {
Log.d("ScoreCard",e.toString());
}
//Retrieve the JSON data
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
Log.d(TAG, line);
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("Scorecard", "Error converting result "+ e.toString());
return result;
}
//Hopefully returning a string that can be converted to a JSON array...
return result;
}
}
不想让信息超载你,因为它可能会让人不知所措。试试这个作为起点,看看你是否能到达你需要的地方。如果没有,请告诉我。如果可以的话,我会尽力帮助你。
于 2012-07-30T03:19:31.237 回答