Я пытаюсь получить заголовок YouTube из URL-адреса, используя файл json, но я не получаю никакого результата, и я также не получаю никаких исключений.

Я пытаюсь получить заголовок YouTube из URL-адреса, используя файл json, но я не получаю никакого результата, и я также не получаю никаких исключений. Я пытаюсь тостировать исключение в тост-сообщении, ноль/пусто. Кто-нибудь может мне помочь. мой код здесь...

String link = youtube url;
URL embededURL = null;
try {
    embededURL = new URL("http://www.youtube.com/oembed?url=" + link + "&format=json");
} catch (MalformedURLException e) {
    e.printStackTrace();
    makeToast(e.getMessage());
}
try {
    title = new JSONObject(IOUtils.toString(embededURL)).getString("title");
} catch (JSONException e) {
    e.printStackTrace();
    makeToast(e.getMessage());
} catch (IOException e) {
    e.printStackTrace();
    makeToast(e.getMessage());
}

makeToast(title);

person Hiten    schedule 06.03.2021    source источник
comment
Какую версию Apache Commons IO вы используете? Похоже, что IOUtils.toString(URL) считается устаревшим, начиная с версии 2.5. Вот список последних выпусков: mvnrepository.com/artifact/commons-io/commons- ио   -  person Janez Kuhar    schedule 06.03.2021


Ответы (1)


Прежде всего, поскольку тег вашего вопроса android-volley, я дам вам ответ android-volley. Тем не менее, есть много библиотек, которые управляют HTTP-вызовами субъективно более удобным способом, например OkHttp.

Теперь краткий ответ на ваш вопрос: ваш код даже не звонит в Интернет.

Более длинный ответ:

  1. Добавьте зависимость volley в свой build.gradle
dependencies {
    //... other dependencies
    implementation 'com.android.volley:volley:1.1.1'
}
  1. Поместите <uses-permission android:name="android.permission.INTERNET" /> в свой AndroidManifest.xml

  2. Сделайте вызов приложения в Интернет, как показано ниже. Я изменил простой пример Android Volley.

RequestQueue queue = Volley.newRequestQueue(context);
// sample of a URL-encoded url param, so you'll need to convert your link variable if you haven't already
String url = "https://www.youtube.com/oembed?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiwGFalTRHDA&format=json";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                String title = new JSONObject(response).getString("title");
                Toast.makeText(context, title, Toast.LENGTH_LONG).show();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(context, "Error!", Toast.LENGTH_LONG).show();
        }
    });

// Add the request to the RequestQueue.
queue.add(stringRequest);
person lemuel    schedule 06.03.2021
comment
Привет, братан, я уже использовал это, но все же, если мы поднимем сообщение об ошибке, например, e.getMessage, оно будет пустым. Как я могу решить это - person Hiten; 06.03.2021
comment
Мой совет: не используйте тосты для сообщений об ошибках. Если вы занимаетесь разработкой Android в качестве хобби или карьеры, прочтите журналы. Поднимите что-нибудь удобное для пользователя, даже если там просто написано «Произошла ошибка». - person lemuel; 06.03.2021
comment
Я разместил рабочий код в своем образце, включая образец URL. Вам просто нужно вставить его поверх вашего неработающего кода, и я гарантирую, что он поджарит заголовок. После этого вы должны настроить его в соответствии с вашими потребностями. - person lemuel; 06.03.2021