2017-02-03 4 views
0

私は頻繁にWebサービスを使用するアンドロイドアプリを作成する任務を受けています。Androidスタジオ - ウェブページのコンテンツを取得するにはどうすればよいですか?

私はアンドロイドとJavaを初めて使っていますが、なぜこれが動作しないのかわかりません。助けてもらえますか?この時点で私がしようとしているのは、ウェブサイト(この場合はGoogle)のhtmlコードを記録することだけです。

MainActivity.java

package com.dummies.myapplication; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.util.Log; 
import com.dummies.myapplication.WebService; 
public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String contents = WebService.getContents("http://www.google.com", "utf-8"); 
     Log.d("Jon", contents); 


     setContentView(R.layout.activity_main); 
    } 

    public void invokeWS(){ 

    } 
} 

WebService.java

package com.dummies.myapplication; 



import android.util.Log; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import android.util.Log; 

class WebService { 
    public static String getContents(String url, String encodeType) { 
     URL u; 
     StringBuilder builder = new StringBuilder(); 
     try { 
      u = new URL(url); 
      try { 
       BufferedReader theHTML = new BufferedReader(new InputStreamReader(u.openStream(), encodeType)); 
       String thisLine; 
       while ((thisLine = theHTML.readLine()) != null) { 
        builder.append(thisLine).append("\n"); 
       } 
      } catch (Exception e) { 
       Log.d("Jon", "Error 2"); 

      } 
     } catch (MalformedURLException e) { 
      Log.d("Jon", "Error"); 
      System.err.println(url + " is not a parseable URL"); 
      System.err.println(e); 
     } 
     return builder.toString(); 
    } 
} 

私は、これが理由で、エラー2がログに来る得続けますか?誰かがこのコードを動作させ、出力を記録する手助けをすることができます。 ありがとう!

スタック:

02-03 23:41:56.261 2297-2297/com.dummies.myapplication D/Jon: Stack Trace: 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err: android.os.NetworkOnMainThreadException 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at java.net.InetAddress.getAllByName(InetAddress.java:752) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98) 
02-03 23:41:56.262 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at java.net.URL.openStream(URL.java:1057) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.dummies.myapplication.WebService.getContents(WebService.java:22) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.dummies.myapplication.MainActivity.onCreate(MainActivity.java:23) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.Activity.performCreate(Activity.java:6662) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.os.Looper.loop(Looper.java:154) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6077) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
02-03 23:41:56.263 2297-2297/com.dummies.myapplication W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
02-03 23:41:56.527 1278-1484/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property 

               [ 02-03 23:41:56.529 2297: 2297 D/   ] 
               HostConnection::get() New Host Connection established 0xa4a93200, tid 2297 


               [ 02-03 23:41:56.530 2297: 2297 W/   ] 
               Process pipe failed 
02-03 23:41:56.556 1278-1318/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 

               [ 02-03 23:41:56.557 2297: 2413 D/   ] 
               HostConnection::get() New Host Connection established 0xa4a93600, tid 2413 
02-03 23:41:56.563 2297-2413/com.dummies.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4 
02-03 23:41:56.563 2297-2413/com.dummies.myapplication D/OpenGLRenderer: Swap behavior 1 
02-03 23:41:56.564 1278-1318/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 
02-03 23:41:56.572 1278-1318/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 
02-03 23:41:56.594 2297-2413/com.dummies.myapplication E/EGL_emulation: tid 2413: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH) 
02-03 23:41:56.594 2297-2413/com.dummies.myapplication W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x98224160, error=EGL_BAD_MATCH 
02-03 23:41:56.603 2271-2271/com.google.android.googlequicksearchbox:search W/art: Long monitor contention with owner Binder:2271_1 (2283) at void java.lang.Object.wait!()(Object.java:-2) waiters=0 in java.lang.Object a.a.c.get() for 470ms 
02-03 23:41:56.641 1569-1592/system_process I/ActivityManager: Displayed com.dummies.myapplication/.MainActivity: +6s119ms 
02-03 23:41:56.655 1569-1693/system_process I/WindowManager: Destroying surface Surface(name=com.android.launcher3/com.android.launcher3.Launcher) called by com.android.server.wm.WindowStateAnimator.destroySurface:2014 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.destroyOrSaveSurface:2073 com.android.server.wm.AppWindowToken.destroySurfaces:363 com.android.server.wm.AppWindowToken.notifyAppStopped:389 com.android.server.wm.WindowManagerService.notifyAppStopped:4456 com.android.server.am.ActivityStack.activityStoppedLocked:1252 com.android.server.am.ActivityManagerService.activityStopped:6895 
02-03 23:41:56.669 2271-2414/com.google.android.googlequicksearchbox:search W/ModelDownloadController: Cannot find any speech config location. 
+0

の代わりに 'Log.d( "ジョン"、 "エラー2")を使用して、'、 '' e.printStackTrace()を使用し、私達にスローされる例外を示しています。 –

+0

これはあなたの後に何ですか? – TEster

答えて

0

問題は、AndroidはあなたがUIOperationsが起こる同じスレッド上でネットワークオペレーションを実行することはできませんということです。

ネットワークに接続するには、AsyncTasksまたはServicesを使用して別のスレッドを作成する必要があります。

は、ここでAndroid上でネットワークスに関する詳細な答えです:How to fix android.os.NetworkOnMainThreadException?

0

たぶん、あなたはJsoupライブラリを使用する必要があります。それは超クールです。ここで詳しい情報を見つけることができます。

https://jsoup.org/

関連する問題