2017-04-10 12 views
0

こんにちは私はアンドロイドスタジオを使用してアプリケーションを作成していますが、私自身は解決しにくいエラーが発生しました。私がしたいのは、URLからCSVファイルを読み込み、各行に値をマップマーカーに追加することだけです。私は簡単にファイルから読み取られ、自分のマーカーに追加しますが、このURLのcsv読み込みは私のために挑戦を証明して:(。私のミスで何をいただくか、より良い、それがあまりにも簡素化することができることができます。Java NetworkOnMainThreadException URLからCSVファイルを読み取る

HttpURLConnection conn = null; 
    try { 
     URL url = new URL("http://www.free-map.org.uk/course/mad/ws/get.php?username=user002&format=csv"); 
     conn = (HttpURLConnection) url.openConnection(); 
     InputStream in = conn.getInputStream(); 
     if(conn.getResponseCode() == 200) 
     { 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String inputLine; 
      while ((inputLine = br.readLine()) != null) { 
       String[] comps = inputLine.split(","); 
       if (comps.length == 5) { 
        OverlayItem currentItem = new OverlayItem(comps[0], comps[2], new GeoPoint(Double.parseDouble(comps[4]), Double.parseDouble(comps[3]))); 
        pois.addItem(currentItem); 
       } 
      } 
     } 

    }catch (IOException e){ 
     new AlertDialog.Builder(this).setMessage("ERROR: "+e).show(); 
    } 
    finally 
    { 
     if(conn!=null) 
      conn.disconnect(); 
    } 

私はそれが助け場合は、それが働いているかどうかをテストするための再開に私の中に置かれ、このコードを()を持っています。これらはLogcatに表示されたエラーです。

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.edwin.mapping, PID: 2048 
        java.lang.RuntimeException: Unable to resume activity {com.example.edwin.mapping/com.example.edwin.mapping.HelloMap}: android.os.NetworkOnMainThreadException 
         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2788) 
         at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2817) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) 
         at android.app.ActivityThread.access$800(ActivityThread.java:135) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:136) 
         at android.app.ActivityThread.main(ActivityThread.java:5017) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
         at dalvik.system.NativeStart.main(Native Method) 
        Caused by: android.os.NetworkOnMainThreadException 
         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
         at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
         at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
         at java.net.InetAddress.getAllByName(InetAddress.java:214) 
         at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 
         at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 
         at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 
         at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 
         at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
         at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
         at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
         at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 
         at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179) 
         at com.example.edwin.mapping.HelloMap.onResume(HelloMap.java:158) 
         at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192) 
         at android.app.Activity.performResume(Activity.java:5310) 
         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2778) 
         at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2817)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)  
         at android.app.ActivityThread.access$800(ActivityThread.java:135)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:136)  
         at android.app.ActivityThread.main(ActivityThread.java:5017)  
         at java.lang.reflect.Method.invokeNative(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:515)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  
         at dalvik.system.NativeStart.main(Native Method)  
Application terminated. 

答えて

2

は、ネットワーク操作を実行するためにAsync Taskを使用しています。実行しないでくださいそれはUIスレッド上。

private class ReadFile extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     HttpURLConnection conn = null; 
     try { 
      URL url = new URL("http://www.free-map.org.uk/course/mad/ws/get.php?username=user002&format=csv"); 
      conn = (HttpURLConnection) url.openConnection(); 
      InputStream in = conn.getInputStream(); 
      if(conn.getResponseCode() == 200) 
      { 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
       String inputLine; 
       while ((inputLine = br.readLine()) != null) { 
        String[] comps = inputLine.split(","); 
        if (comps.length == 5) { 
         OverlayItem currentItem = new OverlayItem(comps[0], comps[2], new GeoPoint(Double.parseDouble(comps[4]), Double.parseDouble(comps[3]))); 
         pois.addItem(currentItem); 
        } 
       } 
      } 

     }catch (Exception e){ 
      Log.e("Error, e.toString()); 
     } 
     finally 
     { 
      if(conn!=null) 
       conn.disconnect(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 

    @Override 
    protected void onPreExecute() {} 
} 

が今使用してそれを呼び出す:例:

new ReadFile().execute(""); 
関連する問題