Android App不与数据库同步

时间:2012-07-06 21:23:25

标签: php android mysql

我正在开发的Andriod应用程序使用Http Gets / Posts在我的网站上使用PHP文件在mysql数据库上执行事务。

在PHP方面,我使用JSON包装数据,以便在收到响应时解析应用程序的Java端。我最近修改了其中一个表并从表中删除了不必要的值。当我使用我网站上的PHP脚本进行轮询时,它会正确轮询。当我使用使用相同PHP脚本进行轮询的应用程序时,它会返回我已从数据库中删除的其他值。

我重新启动了Eclipse,清理了项目,并重新启动了Android VDM来刷新它;但是,它会继续找到已删除的值。关于发生了什么的任何想法?

这是我从应用程序连接到的PHP脚本:

<?php
mysql_connect("localhost", "******", "******");
mysql_select_db("bouncet2_pogoapp");

$query = "SELECT * FROM Event_Table ORDER BY Event ASC";
$sql = mysql_query($query);

while($row=mysql_fetch_assoc($sql))
$output[]=$row;

print(json_encode($output));

mysql_close();
?>

至于使用脚本在应用程序中的代码:

try {
        String response = CustomHttpClient.executeHttpGet("http://www.*****.com/****/****/***/GetEvents.php");
        //System.out.println(response);

        try {
            eventArray = new JSONArray(response);
            //Log.i(SelectEventActivity.class.getName(), "Number of entries " + eventArray.length());

            m_adapterForSpinner = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
            m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

            event_Spinner.setAdapter(m_adapterForSpinner);          

            for (int i = 0; i < eventArray.length(); i++) {
                JSONObject jsonObject = eventArray.getJSONObject(i);
                m_adapterForSpinner.add(jsonObject.getString("Event"));
                //Log.i(AddJumpersActivity.class.getName(), jsonObject.getString("Event"));
            }

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

函数executeHttpGet(URL)是CustomHttpClient类的一部分,如下所示:

public static String executeHttpGet(String url) throws Exception {

    StringBuilder builder = new StringBuilder();
    HttpClient client = getHttpClient();
    HttpGet request = new HttpGet();
    request.setURI(new URI(url));

    try {            
        HttpResponse response = client.execute(request);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();

        if (statusCode == 200) {
            Log.i(CustomHttpClient.class.toString(), "System Status OK");
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
        } else {
            Log.e(CustomHttpClient.class.toString(), "Failed to download file");
        } 
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return builder.toString();            
}

1 个答案:

答案 0 :(得分:1)

看起来您的响应正在某处缓存,在手机与服务器之间或手机本身的缓存服务器中以太网。

如果缓存发生在手机外部,添加适当的标头以禁用缓存就可以了。这将被服务器添加到响应的标头中。有几种方法可以做到这一点,但我认为这应该有用......

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");

在电话方面,根据您从getHttpClient获得的HTTP客户端,它可能是启用了缓存的客户端。在冰淇淋三明治中,谷歌向HttpURLConnection HTTP客户端添加了缓存。必须根据文档启用缓存,但是许多人似乎在没有意识到缓存时遇到缓存问题。我不熟悉Android上各种HTTP客户端的互通,但这应该是一个好的开始...

http://developer.android.com/reference/java/net/HttpURLConnection.html

快速而肮脏的检查以查看某些内容是否缓存响应将是在调用服务器时向您的URL添加一个随机的,未使用的参数,类似于......

url += "?unused=" + UUID.randomUUID();

有了这个,你不应该在任何地方缓存,然后你至少可以确定它是否是一个缓存问题,或者从那里开始。