2016-07-27 7 views
0
public class ODKortrijkWebservice extends AsyncTask < ODKortrijkInterface, Void, String > { 
     private ODKortrijkInterface listener;@ 
     Override 
     protected String doInBackground(ODKortrijkInterface...arg0) { 
      listener = arg0[0]; 
      InputStream is = null; 
      int len = 10000; 
      StringBuilder winkelBuilder = new StringBuilder(); 

      // execute search 
      try { 

       URL url = new URL("http://data.kortrijk.be/middenstand/winkels_markten"); 
       try { 
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
        urlConnection.setReadTimeout(10000 /* milliseconds */); 
        urlConnection.setConnectTimeout(15000 /* milliseconds */); 
        urlConnection.setRequestMethod("GET"); 
        urlConnection.setDoInput(true); 
        urlConnection.connect(); 
        int response = urlConnection.getResponseCode(); 
        Log.d("Inputstream", "The response is: " + response); 
        is = urlConnection.getInputStream(); 
        // Todo: add every line to my winkelBuilder?? 
       } finally { 
        if (is != null) { 
         is.close(); 
        } 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return winkelBuilder.toString(); 
     } 


     protected void onPostExecute(String result) { 
      ArrayList <Winkel> winkels = processResult(result); 
      listener.updateScreen(winkels); 
     } 

     private ArrayList <Winkel> processResult(String result) { 
      ArrayList <Winkel> winkels = new ArrayList <Winkel>(); 
      Winkel winkel = new Winkel(); 
      try { 
       // parse XML 
       XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
       factory.setNamespaceAware(true); 
       XmlPullParser xpp = factory.newPullParser(); 
       xpp.setInput(new StringReader(result)); 

       int eventType = xpp.getEventType(); 
       boolean isItem = false; 
       while (eventType != XmlPullParser.END_DOCUMENT) { 
        if (eventType == XmlPullParser.START_TAG) { 
         if (xpp.getName().equalsIgnoreCase("company")) { 
          winkel = new Winkel(); 
          isItem = true; 
         } else if (xpp.getName().equalsIgnoreCase("bedrijfsnaam") && isItem) { 
          xpp.next(); 
          winkel.setNaam(xpp.getText()); 
         } else if (xpp.getName().equalsIgnoreCase("postcde") && isItem) { 
          xpp.next(); 
          winkel.setPostcode(xpp.getText()); 
         } else if (xpp.getName().equalsIgnoreCase("deelgemeente") && isItem) { 
          xpp.next(); 
          winkel.setGemeente(xpp.getText()); 
         } else if (xpp.getName().equalsIgnoreCase("gemeente") && isItem) { 
          xpp.next(); 
          winkel.setDeelGemeente(xpp.getText()); 
         } else if (xpp.getName().equalsIgnoreCase("adres") && isItem) { 
          winkel.setAdres(xpp.getText()); 
          winkels.add(winkel); 
          isItem = false; 
         } 

        } 
        eventType = xpp.next(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return winkels; 
     } 
    } 

私は自分のパーサを一番下に持っています。ウェブサービスからデータを取得し、すべての行を読み込み、stringbuilderを読み込んでパーサーが解析できるようにする必要があります。私は(???)私はデータベースに正しく接続していると思うが、私はどのように私が読めるようになっているデータを作るのですか?それを実行しようとすると、私はこのエラーを取得:私はそれを解析できるようにウェブサイトから私のデータを取得するには?

07-27 13:31:57.993 17259-17288/com.example.hoofdgebruiker.winkelskortrijk E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
                          Process: com.example.hoofdgebruiker.winkelskortrijk, PID: 17259 
                          java.lang.RuntimeException: An error occured while executing doInBackground() 
                           at android.os.AsyncTask$3.done(AsyncTask.java:304) 
                           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
                           at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
                           at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                           at java.lang.Thread.run(Thread.java:818) 
                          Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
                           at com.example.hoofdgebruiker.winkelskortrijk.Utill.ODKortrijkWebservice.doInBackground(ODKortrijkWebservice.java:28) 
                           at com.example.hoofdgebruiker.winkelskortrijk.Utill.ODKortrijkWebservice.doInBackground(ODKortrijkWebservice.java:24) 
                           at android.os.AsyncTask$2.call(AsyncTask.java:292) 
                           at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
                           at java.lang.Thread.run(Thread.java:818)  
+0

タイトルが完全に間違っています。すでにWebページからデータを取得しています。あなたが知りたいのは、入力ストリームから単一の文字列を読み込む方法だけです。 – isnot2bad

+0

@編集してください。ごめんなさい。 – user3117628

答えて

0

あなたは、この使用することができます:

BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); String parseThis = reader.readLine();

をあなたに、出力の文字列をあげるあなたに

編集ありがとうございました。 JSONの場合:

JSONObject jsonObj = new JSONObject(parseThis); JSONArray arrayOfStuff = jsonObj.getJSONArray(array_tag);

+0

これを使うと、自動的にすべての行が読み込まれるわけではありません。どのように私はすべての行を読むのですか?ありがとうbtw – user3117628

+0

JSONにあれば、それは1行にあるので、parseThisはJSONObject全体を保持します。実際に複数の場合は、 'reader.readLine()'をもう一度呼び出すことができます。それは次のものにジャンプします。あなたは大歓迎です。がんばろう。 – Steeno

関連する問題