2016-08-12 5 views
0

Из этого URL: java.net.URL in android .. newbie questionjava.net.URL в андроиде .., приложение немедленно закрыт, новичок

, когда им раскомментировать эту строку моего начало приложения закрыто:

BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream())); 

Моей цели получить-доступ для URL. Я имею в виду получить html-код и после этого его разбора. Сначала попробуйте, чтобы получить URL-адрес url (образец в неиспользуемой функции), но для обычного url я застрял. Спасибо за помощь ..

мой полный код:

public class MainActivity extends Activity { 

    private ProgressDialog progressDialog; 
    private Bitmap bitmap = null; 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     final EditText editTexts = (EditText) findViewById(R.id.editText1); 
     editTexts.setOnKeyListener(new EditText.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { // If the event is a key-down event on the "enter" button 
       if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { // Perform action on key press 
        String name = "Hello " + editTexts.getText(); 
        Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show(); 
        TextView t = (TextView) findViewById(R.id.textView1); 
        t.setText(name); 
        if (checkInternetConenction()) { 
         //       downloadImage("http://www.tutorialspoint.com/green/images/logo.png"); 
         //https://postimg.org/image/5bjco36kl/597f512a/ 
         //downloadImage("http://s10.postimg.org/5bjco36kl/Quotes_Cover_pic14.png"); // works 
         try { 
          URL url = new URL("http://www.google.com/humans.txt"); 
          HttpURLConnection http = (HttpURLConnection) url.openConnection(); 
          //int statusCode = http.getResponseCode(); 
          String outdata = ""; 
          String inputLine; 
          BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream())); 
          //while ((inputLine = in.readLine()) != null) 
          // outdata += inputLine; 
          //t.setText(outdata); 
          //in.close(); 

         } catch (IOException e1) { 
          e1.printStackTrace(); 
         } 
        } 
        //      if(isOnline()) // works ! 
        { 
         //       Toast.makeText(MainActivity.this, "dalam in kondisi OL ?" , Toast.LENGTH_SHORT).show(); 
         //       t.setText(name+" boolean bro"); 
        } 
       } 
       return false; 
      } 
     }); 
     return false; 
    } 

    public boolean isOnline() { 
     ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

     Boolean res; 
     res = false; 
     if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING) { 

      Toast.makeText(MainActivity.this, "online", Toast.LENGTH_SHORT).show(); 
      // notify user you are online 
      res = true; 
     } else if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { 

      Toast.makeText(MainActivity.this, "offline", Toast.LENGTH_SHORT).show(); 
      res = false; 
      // notify user you are not online 
     } 
     return res; 
    } 


    private boolean checkInternetConenction() { 
     //  Toast.makeText(MainActivity.this, "here", Toast.LENGTH_SHORT).show(); 

     // get Connectivity Manager object to check connection 
     ConnectivityManager connec = (ConnectivityManager) getSystemService(getBaseContext().CONNECTIVITY_SERVICE); 


     //  string stat = connec.getNetworkInfo(0).getState(); 

     //Toast.makeText(MainActivity.this, "stat"+stat, Toast.LENGTH_SHORT).show(); 

     // Check for network connections 
     if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || 

      connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || 
      connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || 
      connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { 
      //   Toast.makeText(MainActivity.this, "here1", Toast.LENGTH_SHORT).show(); 
      Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show(); 
      return true; 
     } else if (
      connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || 
      connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { 
      //   Toast.makeText(MainActivity.this, "here2", Toast.LENGTH_SHORT).show(); 
      Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show(); 
      return false; 
     } 
     //  Toast.makeText(MainActivity.this, "here3", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 

    private void downloadImage(String urlStr) { 
     progressDialog = ProgressDialog.show(this, "", "Accessing data from " + urlStr); 
     final String url = urlStr; 

     new Thread() { 
      public void run() { 
       InputStream in = null; 

       Message msg = Message.obtain(); 
       msg.what = 1; 

       try { in = openHttpConnection(url); 
        // change start here.. 
        bitmap = BitmapFactory.decodeStream(in); 
        Bundle b = new Bundle(); 
        b.putParcelable("bitmap", bitmap); 
        msg.setData(b); in .close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
       messageHandler.sendMessage(msg); 
      } 
     }.start(); 
    } 



    private void downloadImage_(String urlStr) { 
     progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr); 
     final String url = urlStr; 

     new Thread() { 
      public void run() { 
       InputStream in = null; 

       Message msg = Message.obtain(); 
       msg.what = 1; 

       try { in = openHttpConnection(url); 
        bitmap = BitmapFactory.decodeStream(in); 
        Bundle b = new Bundle(); 
        b.putParcelable("bitmap", bitmap); 
        msg.setData(b); in .close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
       messageHandler.sendMessage(msg); 
      } 
     }.start(); 
    } 

    private InputStream openHttpConnection(String urlStr) { 
     InputStream in = null; 
     int resCode = -1; 

     try { 
      URL url = new URL(urlStr); 
      URLConnection urlConn = url.openConnection(); 

      if (!(urlConn instanceof HttpURLConnection)) { 
       throw new IOException("URL is not an Http URL"); 
      } 
      HttpURLConnection httpConn = (HttpURLConnection) urlConn; 
      httpConn.setAllowUserInteraction(false); 
      httpConn.setInstanceFollowRedirects(true); 
      httpConn.setRequestMethod("GET"); 
      httpConn.connect(); 
      resCode = httpConn.getResponseCode(); 

      if (resCode == HttpURLConnection.HTTP_OK) { in = httpConn.getInputStream(); 
      } 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return in; 
    } 

    private Handler messageHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      ImageView img = (ImageView) findViewById(R.id.imageView1); 
      img.setImageBitmap((Bitmap)(msg.getData().getParcelable("bitmap"))); 
      progressDialog.dismiss(); 
     } 
    }; 
} 
+1

Вместо вашего полного кода нам нужен ваш логарифм. –

+0

где я мог это получить? Я все еще изучаю java .. и я тестирую прямо на своем телефоне, если я использую avd, беру возраст, чтобы завершить загрузку. –

+0

Вы не должны развиваться прямо на телефоне - только ** **. Если он хорошо работает в эмуляторе, он будет работать быстрее на устройстве. Или вы рискуете, что ваше приложение работает прилично на вашем супернасосном устройстве и идет как улитка на нижних конечных устройствах. В любом случае, logcat все еще создается, даже если вы запустите приложение на своем телефоне. –

ответ

1

Вам не разрешено использовать подключение к Интернету на главном потоке приложения Android см here. Его, вероятно, проще всего использовать AsyncTask Но есть много вариантов other. Больше информации можно найти here.

+0

, так что по-другому это проверить? cz, когда я тестирую его, он работает. Toast.makeText (MainActivity.this, «онлайн», Toast.LENGTH_SHORT) .show(); показать результат на главном дисплее. –