2017-01-05 3 views
0

Я пытаюсь изучить Android и сделать несколько образцов.Android Java: HttpURLConnection

Это мой код.

try 
    { 
     URL url = new URL("http://google.com"); 
     HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 
     uc.setReadTimeout (10 * 1000); 

     int rc = uc.getResponseCode(); 
    } 
    catch (Exception e) 
    { 

    } 

Он отлично работает, если я бегу под Linux.

Но если я поместил его в Android, я получаю исключение NULL в getResponseCode.

Пробовал в эмуляторе Android Studio. Сетевые подключения выглядят нормально, Chrome в эмуляторе работает хорошо.

Я попробовал его в onCreate, а также в Click-Listener кнопки. Он импортируется из java.net.

Манифест делает есть

<uses-permission android:name="android.permission.INTERNET" /> 

включены.

Любые идеи? Благодаря!

EDIT: Thats stackktrace после вызова getResponseCode.

D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.ch.my1stapplication, PID: 3435 
       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference 
        at com.example.ch.my1stapplication.MainActivity$4.onClick(MainActivity.java:173) 
        at android.view.View.performClick(View.java:5637) 
        at android.view.View$PerformClick.run(View.java:22429) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
+2

Пожалуйста, добавьте полный Logcat на свой вопрос. –

+0

Ничего особенного в нем не ожидает какой-либо log-вывод, который я вставлял перед getResponseCode. А затем «NULL» исключений getMessage(). – chris01

+1

Я заинтересован в Stack Trace. Надеюсь, вы не подавите его. –

ответ

4
private class Task extends AsyncTask<Void , Void , Void>{ 
     @Override 
     protected Void doInBackground(Void... voids) { 
      try 
      { 
       URL url = new URL("http://google.com"); 
       HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 
       uc.setReadTimeout (10 * 1000); 

       int rc = uc.getResponseCode(); 
       Log.d("rc" , rc+""); 
      } 
      catch (Exception e) 
      { 

      } 
      return null; 
     } 
    } 

new Task().execute(); 

Необходимо создать поток для обработки сетевых вызовов. Когда вы выполняете сетевые вызовы в основном потоке, чтобы он не выполнял программу успешно.

2

Кажется, вы пытаетесь сделать сетевое взаимодействие в основном потоке пользовательского интерфейса - это запрещено с 11+. Для выполнения сетевых вызовов необходимо использовать AsyncTask или AsyncLoader.

Смежные вопросы