【问题标题】:Parameters not being passed into URL in Android参数未传递到 Android 中的 URL
【发布时间】:2011-06-08 04:39:33
【问题描述】:

好的,我查看了多个示例,我的代码似乎是正确的,但是无论出于何种原因,参数都没有添加到 URL 中。我正在尝试连接到 Last.Fm API,我的代码如下:

searchIT.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            //Create new HTTPClient and Post header
            HttpPost API_ROOT = new HttpPost("http://ws.audioscrobbler.com/2.0/");
            HttpClient httpclient = new DefaultHttpClient();

            try 
            {
                //Add Data
                List<NameValuePair> nameValPairs = new ArrayList<NameValuePair>(4);

                nameValPairs.add(new BasicNameValuePair("method", "artist.getevents")); //Get events for artist
                nameValPairs.add(new BasicNameValuePair("artist", namesBox.getText().toString()));  //Get artist name
                nameValPairs.add(new BasicNameValuePair("autocorrect", "1"));   //Turn on AutoCorrect
                nameValPairs.add(new BasicNameValuePair("api_key", "xxxxxxxxxxxxxxxxxxxx")); //API Key - redacted for privacy
                API_ROOT.setEntity(new UrlEncodedFormEntity(nameValPairs));
                Log.i(TAG, "URL: " + API_ROOT.getURI().toString());

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


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

我只是在这里遗漏了什么吗?在日志中,url 显示为:http://ws.audioscrobbler.com/2.0/,所以它似乎丢失了我试图传递给它的所有参数。有任何想法、提示、更正或建议吗?谢谢!

【问题讨论】:

    标签: android api httpclient last.fm


    【解决方案1】:

    从你的 onClick 方法开始一个新的活动并传递你想要的所有参数

                HashMap<String, String> o = (HashMap<String, String>) searchList.getItemAtPosition(position);
                Intent i = new Intent(SearchActivity.this, SearchDetails.class);
                i.putExtra("method", o.get("method"));
                i.putExtra("artist", o.get("artist"));
                i.putExtra("autocorrect", o.get("autocorrect"));
                i.putExtra("api_key", o.get("api_key"));
    

    然后在您的新活动中:在 onCreate 方法中

        Intent myIntent = getIntent(); 
        String method= myIntent.getStringExtra("method");
        String artist= myIntent.getStringExtra("artist");
        String autocorrect= myIntent.getStringExtra("autocorrect");
        String api_key= myIntent.getStringExtra("api_key");
    

    现在您将获得所需的参数并将它们添加到您的 URL。

    希望有效果

    【讨论】:

    • 很好的建议,我曾想过这样做,虽然我现在只是在测试并且有 1 个活动,用户输入乐队名称并点击搜索,所以不确定 Intents 是否真的会进入在这里玩,但我确实计划稍后使用更多活动......但我离题了。我主要担心的是传递到 URL 中的参数会根据您的请求而改变(即“艺术家”参数并不总是在那里)。在我看来,您可能希望有一次调用 API 的方法并将参数传递给该方法,具体取决于您要执行的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多