【问题标题】:How to add parameter to Url in HttpURLConnection如何在 HttpURLConnection 中向 Url 添加参数
【发布时间】:2019-03-13 11:02:56
【问题描述】:

我正在尝试将 matchday 传递给 Http 连接的 URL。我知道我无法从 doInBackground 方法中的 EditText 获取值,所以我想在 onPreExecute 方法中获取值。然后我将变量添加到 URL,程序无法识别字符串。我在 StackOverflow 上看到您需要在执行方法中添加参数,但我真的没有得到那部分的解释。

有没有人知道如何将比赛日添加到在 EditText matchdayText 中输入的 URL?

提前致谢! 罗伯尼克曼斯

代码:

    package ga.rndevelopment.footballpronostics;

    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ProgressBar;
    import android.widget.TextView;

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;


    public class MainActivity extends AppCompatActivity {

    EditText matchdayText;
    TextView responseView;
    ProgressBar progressBar;
    static final String API_KEY = "HIDDEN";
    static final String API_URL = "http://api.football-data.org/v2/competitions/PL/matches/?matchday=";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        responseView = findViewById(R.id.responseView);
        matchdayText = findViewById(R.id.matchdayText);
        progressBar = findViewById(R.id.progressBar);

        Button queryButton = findViewById(R.id.queryButton);
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new FetchData().execute();
            }
        });
    }

    class FetchData extends AsyncTask<Void, Void, String> {

        @Override
        protected void onPreExecute() {
            progressBar.setVisibility(View.VISIBLE);
            responseView.setText("");
            String matchDay = matchdayText.getText().toString();
            String apiUrl = API_URL + matchDay;
        }

        @Override
        protected String doInBackground(Void... params) {

            try {
                URL url = new URL(apiUrl);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

                urlConnection.addRequestProperty("X-Auth-Token", API_KEY);

                try {
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    StringBuilder stringBuilder = new StringBuilder();
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        stringBuilder.append(line).append("\n");
                    }
                    bufferedReader.close();
                    return stringBuilder.toString();
                } finally {
                    urlConnection.disconnect();
                }
            } catch (Exception e) {
                Log.e("ERROR", e.getMessage(), e);
                return null;
            }
        }

        @Override
        protected void onPostExecute(String response) {
            if (response == null) {
                response = "THERE WAS AN ERROR";
            }
            progressBar.setVisibility(View.GONE);
            Log.i("INFO", response);
            responseView.setText(response);
        }
    }
}

【问题讨论】:

  • 你没有。已经太晚了。您首先将参数添加到 URL 字符串,然后构造 URL,然后构造 HttpURLConnection

标签: java android-asynctask httpurlconnection


【解决方案1】:

首先使用 URL Connection.There 创建连接。 缓冲区写入器并在一个字符串中传递所有请求的数据 那里的缓冲区变量将涉及 URL 和 请求的参数及其值。请通过以下 示例示例

 URL url = new URL("give your URL ");
 URLConnection conn = url.openConnection();
 conn.setDoOutput(true);
 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
        final StringBuilder reqstData = new StringBuilder(100);
        reqstData.append("&userId=").append(userId);
        reqstData.append("&roleId=").append(roleId);
        reqstData.append("&userName=").append(userName);
 out.write(reqstData);
 out.flush();
 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

【讨论】:

  • 我确实可以只过滤数据,但我还计划更改 url 中的其他内容,例如比赛等。这是一个不错的 B 计划,但我在其他线程中看到了另一个更好的解决方案(我不明白,但我知道有这样的选择)。谢谢你的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2010-10-24
  • 2023-03-08
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多