Как добавить параметр в URL в HttpURLConnection - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь передать игровой день URL-адресу для соединения Http. Я знаю, что не могу получить значение из EditText в методе doInBackground, поэтому я подумал получить значение в методе onPreExecute. Затем я добавляю переменную в URL, программа не распознает строку. Я видел в StackOverflow, что вам нужно добавить параметры в метод execute, но у меня нет этой части объяснения.

У кого-нибудь есть идеи, как добавить день матча к URL-адресу, введенному в EditText matchdayText?

Заранее спасибо! Роб Никманс

КОД:

    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);
        }
    }
}

1 Ответ

0 голосов
/ 13 марта 2019

Сначала создайте соединение с помощью URL Connection. Создайте средство записи в буфер и передайте все запрошенные данные в одну строковую переменную буфера, которая будет относиться к URL, а также к параметру Requested и его значениям.Пожалуйста, пройдите этот пример ниже Пример

 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()));
...