Android从客户端发送数据,由服务器检索并再次发送给客户端

时间:2014-02-02 08:18:59

标签: php android mysql sql

大家好我在android中做客户端/服务器应用程序。我想要做的是从客户端发送数据,然后服务器检索并再次发送给客户端..

例如,我要将商品代码发送到我的服务器,我想查询这样的内容:

 SELECT itemname FROM items WHERE itemcode = :itemcode

 $itemname = $result['itemname'];

其中:itemcode是我的客户传递的数据。接下来,在传递itemcode之后,我想使用itemname包含在我的下一个查询中以检索所有其他记录。

SELECT itemsize, itemmeasure FROM itemsdetail WHERE itemname = :itemname

所以它显示所有记录。

到目前为止我尝试过,我创建了另一个表来查询最后插入的数据。但我认为这不高效。我只想把查询放在一个php文件中。

<?php 

include('dbconnect.php');

$sql = "SELECT itemname FROM items ORDER BY _id DESC LIMIT 1";

        $stmt = $conn->prepare($sql);
            $stmt->execute();

            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            $itemname = $result['itemname'];

$sql = "SELECT itemsize, itemmeasure
        FROM itemsdetail
        AND itemname = :itemname";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':itemname' => $itemname));

$set = array();

while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){
    $set = $r;
}

header('Content-type: application/json');
echo json_encode($set);


?>

爪哇:

@Override
protected Void doInBackground(Void... params) {
        // Create the array 
        arraylist = new ArrayList<HashMap<String, String>>();
        // Retrieve JSON Objects from the given website URL in JSONfunctions.class
        String result = JSONFunctions.getJSONfromURL(URL);

        try {
            JSONArray jr = new JSONArray(result);
            for(int i=0;i<jr.length();i++)
             {  
                    HashMap<String, String> map = new HashMap<String, String>();
                      jb = (JSONObject)jr.get(i);
                      map.put(TAG_ITEMSIZE, jb.getString(TAG_ITEMSIZE));
                      map.put(TAG_ITEMMEASURE, jb.getString(TAG_ITEMMEASURE));
                      arraylist.add(map);         

             }
        } catch (JSONException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
} 

到目前为止,如果我将两个查询放在一个PHP文件中,我会收到错误,我不知道出了什么问题。所以我的替代解决方案是创建另一个php文件来接收来自我的客户端的传递数据。但我知道这不是一个好的解决方案。我需要能够将其放在一个php文件中以传递我的数据并使用我在第二个查询中传递的数据。你有什么想法怎么做?对你的帮助表示感谢。谢谢。

2 个答案:

答案 0 :(得分:1)

在Google Plus上聊天后,根本原因是由于您使用JSONParser的教程。 JSONParser似乎是第三方API,令人讨厌......

您从服务器返回一个数组而不是导致问题的对象。以下是Google Plus上共享的实施代码

// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);

try {

    // Building Parameters
    List<NameValuePair> params1 = new ArrayList<NameValuePair>();
    params1.add(new BasicNameValuePair(TAG_VANCODE, "VAN-ABC"));

    // Set HTTPPOST with your parameters
    httppost.setEntity(new UrlEncodedFormEntity(params1));

    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);

    // Setup an InputStream to handle the response.
    InputStream ips  = response.getEntity().getContent();
    BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"iso-8859-1"), 8);

    // Use a reader to read the data and store it in a String builder
    StringBuilder sb = new StringBuilder();
    String s;
    while(true) {
        s = buf.readLine();
        if(s==null || s.length()==0)
            break;
        sb.append(s);
    }
    buf.close();
    ips.close();

    System.out.println("I AM HERE TESTING OUTPUT - " + sb.toString());

    // Take the JSON and create an array
    // sb.string should look like this
    JSONArray jr = new JSONArray(sb.toString());

    for(int i = 0; i<jr.length(); i++) {
        JSONObject jo = jr.getJSONObject(i);
        System.out.println("Document Number " + jo.getString("doccumentnumber"));
        System.out.println("Item Code: " + jo.getString("itemcode"));
    }

} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

尝试

SELECT itemsize, itemmeasure FROM itemdetails INNER JOIN items ON itemdetails.itemname = items.itemname WHERE items.itemcode = #itemcode

我在MySQL方面不是很好,可能你需要设置一些别名,但如果想要只做一个查询,这应该有效。