2015-10-21 2 views
0

ВОПРОСОшибка при использовании HttpConnection

Я пытаюсь разобрать файл XML с веб-сайта. Я использую HTTP-соединение для получения XML-контента с веб-сайта. Пока я загружаю контент, я сталкиваюсь с некоторыми проблемами. Код приведен ниже.

КОД

public class MainActivity extends AppCompatActivity { 
Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button= (Button) findViewById(R.id.button); 

} 
public void process(View view) { 
    Thread thread=new Thread(new Download()); 
    thread.start(); 



} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
public class Download implements Runnable { 
    public void run() { 
     try { 
      URL url = new URL("http://api.androidhive.info/pizza/?format=xml"); 
      HttpURLConnection connection= (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("GET"); 
      connection.getDoOutput(); 
      InputStream stream = connection.getInputStream(); 
      Toast.makeText(MainActivity.this, stream + "", Toast.LENGTH_LONG).show(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} } 

Это код, я использую для загрузки содержимого. Ошибка я получаю

ОШИБКА

10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ java.net.UnknownHostException: Unable to resolve host "api.androidhive.info": No address associated with hostname 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:424) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at java.net.InetAddress.getAllByName(InetAddress.java:214) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at com.example.sajithm.domparsing.MainActivity$Download.run(MainActivity.java:65) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at java.lang.Thread.run(Thread.java:841) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.io.Posix.getaddrinfo(Native Method) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 
10-21 01:14:21.459 25125-25181/com.example.sajithm.domparsing W/System.err﹕ ... 15 more 
    --------- beginning of /dev/log/system 
10-21 01:19:34.259 25125-25131/com.example.sajithm.domparsing D/dalvikvm﹕ GC_FOR_ALLOC freed 306K, 4% free 9003K/9336K, paused 5ms, total 5ms 

ЗАПРОС веб-адрес является действительным. Может кто-нибудь предложить решение для решения этой проблемы. Есть ли другой способ загрузить контент?

+0

Его возможно для доступа к сайту. Я даже вижу содержимое файла. – SAJITH

+0

Возможно, это было временно. В любом случае вы должны обработать эту ошибку изящно, потому что это может повториться. –

+0

ОК. Есть ли другой способ загрузить компоненты с сайта? – SAJITH

ответ

0

Я попытался ниже код и он работал:

Способ сделать вызов:

public void makeXMLRequest() { 
     try { 
      URL url = new URL("http://api.androidhive.info/pizza/?format=xml"); 
      HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
      con.setRequestMethod("GET"); 
      con.getDoOutput(); 
      String readStream = readStream(con.getInputStream()); 
      // Give output for the command line 
      System.out.println(readStream); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Эталонный метод для анализа ответа:

private static String readStream(InputStream in) { 
     StringBuilder sb = new StringBuilder(); 
     try (BufferedReader reader = new BufferedReader(new InputStreamReader(in));) { 

      String nextLine = ""; 
      while ((nextLine = reader.readLine()) != null) { 
       sb.append(nextLine); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return sb.toString(); 
    } 

Как вызвать этот метод:

Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       makeXMLRequest(); 
      } 
     }); 

     thread.start(); 

Попробуйте, если это поможет.

Спасибо ..!

+0

Эта же ошибка отображается снова и снова. Я делаю этот код для минимальной версии Android 2.2. – SAJITH

0

Хотя вы можете получить доступ к веб-сайту через веб-браузер своего компьютера. Я также могу получить доступ к ссылке. Но это не значит, что ваш телефон Android может разрешить доменное имя. Используйте ADB оболочку попробовать

ping api.androidhive.info 

Вы, скорее всего, увидеть отрицательный ответ.

+0

Можете ли вы предложить решение этой проблемы – SAJITH

+0

Вы пробовали пинг? Что в итоге? Возможные причины неработоспособности DNS-клиента на Android включают использование VPN, политики брандмауэра и т. Д. – Popeye

+0

Сэр вы правы. Проблема с моим эмулятором. Я переустановил genymotion. Теперь все работает отлично. Спасибо. – SAJITH

0

Это проблема с эмулятором. В некоторых случаях эмулятор не может получить доступ к веб-сайтам, хотя сайт доступен через наш браузер. Я переустановил виртуальное устройство (в моем случае это Nexus 4.3) внутри Genymotion, теперь все работает нормально, и эмулятор способен получить доступ ко всем веб-сайтам.

Спасибо

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