簡體   English   中英

無法在Android上使用HttpURLConnection將數據發布到站點

[英]Can't POST data to site using HttpURLConnection on Android

我本質上是想模仿通過Android應用程序在這里所做的事情,但是由於某種原因,數據在嘗試發布數據時不會立即返回(當我刪除writer.write(finalResult)行時,它返回的很好)。

我現在想要的是一旦我發送了用戶名,便能夠搜索用戶的數據。

這是我的代碼如下:

try {
        URL u = new URL(url);
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        c.setRequestMethod("POST");
        c.setRequestProperty("Content-length", "0");
        c.setConnectTimeout(timeout);
        c.setReadTimeout(timeout);
        c.setDoInput(true);
        c.setDoOutput(true);

        //Attempting to send data!
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", paramValue));

        OutputStream os = c.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        String finalResult = getQuery(params);
        Log.d("params", finalResult);
        writer.write(finalResult);
        writer.close();
        os.close();

        c.connect();
        int status = c.getResponseCode();

        switch (status) {
            case 200:
            case 201:
                BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line+"\n");
                }
                br.close();
                result = sb.toString();
        }



    } catch (MalformedURLException ex) {
        Log.e("log_tag", "Error converting result ");
    } catch (IOException ex) {
        Log.e("log_tag", "Error in http connection ");
    }
    //json code!
    //parse json data
    try{
        JSONArray jArray = new JSONArray(result);
        //for each object in our json array
        for(int i =0; i < jArray.length(); i++){
            JSONObject json_data =jArray.getJSONObject(i);
            String address = "";
            //Checks for missing data in address - Need a class for all fields
            if (json_data.isNull("address")){
                address = "N/A";            
            }
            else
            {
                address = json_data.getString("address");;
            }
            //read one line of the response
            myListView.setText("Username: "+json_data.getString("username")
                    +" / " + "Name: " + json_data.getString("name")
                    +" / " + "E-mail: " + json_data.getString("email")
                    +" / " + "Address: " + address);
            }
        }
        catch(JSONException e){
            Log.e("log_tag", "Error parsing data"+e.toString());
        }
}

private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for (NameValuePair pair : params)
    {
        if (first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
    }

    return result.toString();
}

這是我的PHP腳本:

<?php
$searchuser = $_GET["username"];
$databasehost = databasehost;
$databasename = database;
$databaseusername = username;
$databasepassword = password;

$con = mysql_connect($databasehost, $databaseusername, $databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());

$query = "SELECT * FROM testusers";
$sth = mysql_query($query);

if (mysql_errno()) {
    header("HTTP/1.1 500 Internal Server Error");
    echo $query."\n";
    echo mysql_error(); 
}
else
{
    $rows = array();
    while ($r = mysql_fetch_assoc($sth)){
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>

由於您將標頭的Content-Length設置為0,因此服務器甚至不會讀取您的內容...因此,您發送的任何內容都不會收到。 您應該將Content-Length設置為finalResult.length()

刪除這個,

c.setRequestProperty("Content-length", "0");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM