java - 使用 PHP Web 服务问题将数据从 Android 应用程序插入到 PostgreSQL 数据库

标签 java php android json postgresql

我对我遇到的这个问题感到抓狂。我试图允许用户将一些数据从他们的 Android 应用程序上传到我开发的网站服务。

数据将使用 JSON 和 Android 上传到 PHP Web 服务,然后该服务会将数据“插入”到我的 PostgreSQL 数据库中。

我不确定整个应用程序中的逻辑错误在哪里,因为应用程序在运行时不会产生错误,但当我检查 PostgreSQL 服务器空间的数据库记录时,没有提交任何数据。

请参阅下面我正在使用的代码,并请尝试帮助确定我哪里出错了。我在 Google 上查找了教程,但它们都是基于从 PHP Web 服务读取数据到 Android 应用程序,但我希望从 Android 应用程序发送原始数据。

DataPost Activity

public void postData() throws JSONException{
       Toast.makeText(DataSummary.this, "Done! Check your profile online to see your record.", Toast.LENGTH_LONG).show();

       Thread trd = new Thread(new Runnable(){
           public void run(){
             //Create a new HttpClient and Post Header
               HttpClient httpclient = new DefaultHttpClient();
               HttpPost httppost = new HttpPost("http://users.aber.ac.uk/dwd/mfb/php/jsonscript.php");
               JSONObject json = new JSONObject();

               Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), i);
                ByteArrayOutputStream bao = new ByteArrayOutputStream();
                bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
                byte[] ba = bao.toByteArray();
                String ba1=Base64.encodeToString(ba, i);

               try {
                   //JSON data:
                   json.put("photo", ba1.toString());
                   json.put("name", name);
                   json.put("description", description);
                   json.put("latitude", latitude);
                   json.put("longitude", longitude);
                   json.put("project", project);
                   json.put("owner", username);

                   JSONArray postjson = new JSONArray();
                   postjson.put(json);

                   //Post the data
                   httppost.setHeader("json", json.toString());
                   httppost.getParams().setParameter("jsonpost", postjson);

                   //Execute HTTP Post Request
                   System.out.println(json);
                   HttpResponse response = httpclient.execute(httppost);

                   //for JSON
                   if(response != null)
                   {
                       InputStream is = response.getEntity().getContent();

                       BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                       StringBuilder sb = new StringBuilder();

                       String line = null;
                       try{
                           while((line = reader.readLine()) != null){
                               sb.append(line + "\n");
                           }
                       } catch (IOException e){
                           e.printStackTrace();
                       } finally {
                           try {
                               is.close();
                           } catch(IOException e){
                               e.printStackTrace();
                           }
                       }
                   }

               } catch(ClientProtocolException e){
                   e.printStackTrace();
               } catch (IOException e){
                   e.printStackTrace();
               } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           }
       });
       trd.start();
   }

PHP 网络服务

<?php
session_start();
$conn = pg_connect("database_string");

//VARIABLES TO BE WRITTEN TO THE DATABASE
$photo = $_REQUEST["photo"];

echo $photo;
$binary=base64_decode($photo);
header('Content-Type: bitmap; charset=utf-8');

$name = json_decode(stripslashes($_POST["name"]));
$safe_name = pg_escape_string($name);
$desc = json_decode(stripslashes($_POST["description"]));
$safe_desc = pg_escape_string($desc);
$latitude = json_decode(stripslashes($_POST["latitude"]));
$longitude = json_decode(stripslashes($_POST["longitude"]));
$project = json_decode(stripslashes($_POST["project"]));
$owner = json_decode(stripslashes($_POST["owner"]));

$id = pg_query("SELECT * FROM users WHERE email = $owner");
$id_assoc = pg_fetch_assoc($id);
$id_res = $id_assoc['u_id'];

//SQL STATEMENT HERE FOR INSERT

$res = pg_query("INSERT INTO records (photo, name, description, latitude, longitude, project, owner) VALUES ('$photo', '$safe_name', '$safe_desc', '$latitude', '$longitude', '$project', '$id_res'");

pg_close($conn);

?>

任何能够提供一些建议/教程/代码解决方案的人都将是我书中的英雄!

最佳答案

SELECT 查询是否返回任何内容?我不是 PHP 专家,但对我来说,您发送的变量似乎是错误的,所以不应该:

$id = pg_query("SELECT * FROM users WHERE email = $owner");

但是

$id = pg_query("SELECT * FROM users WHERE email ='".$owner."'");

与 INSERT 查询类似。 其他想法:

  • 当您只想要一列时,不要执行SELECT *,这样会更慢。例如,在 9.2 中使用仅索引扫描,您可以直接从索引返回 id(email,id)
  • 如果您只想使用用户的 id,最好将其放在插入查询的子查询中 INSERT INTO 记录 ( ... ,owner) VALUES (... ,(SELECT id FROM users WHERE email='".$owner."')") 如果您在其他地方需要,您甚至可以在末尾添加 RETURNING Owner 以从插入查询中获取所有者 ID。

关于java - 使用 PHP Web 服务问题将数据从 Android 应用程序插入到 PostgreSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15588770/

相关文章:

java - 无论方法是否在事务内运行,如何在打开或关闭自动提交的情况下注入(inject)数据源

java - 在 Jtable 中隐藏特定的单元格网格

android - 使用Android的面部识别来验证多个用户

java - 使用 boolean 值仔细检查成语

在 Applet 中执行操作后 Java JDBC 连接丢失

php - 最佳实践 : What's the Best Way for Constructing Headers and Footers?

php - 从 phpMyAdmin 导出非常大的表?

php - 在 php mysql 中使用 if 条件未获取查询输出

android - 我怎样才能刷新 Activity ?

android - 禁用 EditText 上下文菜单