使用MultipartEntity以编程方式填写网站表单

时间:2011-11-01 15:00:34

标签: android network-programming

我正在参加一个专注于Android的移动开发课程,对于我的学期项目,我认为如果我做了一个返回癌症相关事件和筹款人名单的小应用程序,那将会很酷。基本上我要做的是以编程方式填写webform,给出从我的应用程序输入的条件,并解析返回的结果以给出事件列表,因为由于某种原因,美国癌症协会没有保留所有公共列表事件。这是我对android的第一次真实体验,我对网络编程几乎没有经验。如果我真的想,我可以根据给我的参数更改我去的URL,因为ACS事件搜索URL看起来几乎完全相同,但我想“正确”。我查看了this postthis one的指导,这使我进入了MultipartEntity。他们非常乐于助人,但我真的不确定下一步该做什么。代码如下:

    //Base case, creates entity based on Entered ZIP Code
    public void sendRequest()
    {
        EditText MyEditText = (EditText)findViewById(R.id.zip_edit_text);
        String ZIP = MyEditText.getText().toString();

        HttpClient defaultClient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.cancer.org/Involved/Participate/app/event-search");

        try{
            MultipartEntity entity = new MultipartEntity();
            entity.addPart("ZIP",new StringBody(ZIP));
            httppost.setEntity(entity);
            HttpResponse response = defaultClient.execute(httppost);
            HttpEntity result = response.getEntity();

            InputStream stream = result.getContent();
            String s = new Scanner(stream).useDelimiter("\\A").next();

            Intent intent = new Intent(HomeScreen.this, ListResults.class);
            startActivity(intent);
            AlertDialog dialog = new AlertDialog.Builder(this).create();
            dialog.setMessage(s);
            dialog.show();

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

正如你所看到的,现在它很简陋。 AlertDialog仅用于查看HttpResponse的外观,看起来它正确地执行了POST,并且邮政编码最终出现在右侧文本字段中,但它实际上并没有“单击”搜索按钮。我个人认为: 1.)我的HttpPost对象的URL不正确 2.)我使用POST代替GET,或者我应该POST然后GET

我真的试图自己解决这个问题,并且已经搜索了StackOverflow,但我真的遇到了一个粗糙的补丁,正如我之前所说,我的网络编程经验几乎不存在。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您打印输出通过多部分方法发送的网址,通过网络浏览器进行搜索,然后查看两个网址是否匹配。如果URL不匹配,则意味着在设置实体等时出现问题。