2017-03-07 60 views
0

对于我正在制作的应用程序,我需要从特定网址获取数据(CSV或JSON文件),但我无法使其运行。看来我不得不在另一个线程(NetworkOnMainThreadException)中发出请求,但我不知道该怎么做。请求网页并检索数据的正确方法是什么?如何从Android中的URL获取数据?

+0

您是否有获取数据的URL? – tahsinRupam

+1

[使用android进行HTTP请求]的可能重复(http://stackoverflow.com/questions/3505930/make-an-http-request-with-android) – androidnoobdev

+0

[NetworkOnMainThreadException]的可能重复(http:// stackoverflow .COM /问题/ 5150637/networkonmainthreadexception) – petey

回答

1

尽管这是一个重复的,我要answear。 要做到这一点,最好的办法是使用异步方法:

class MyTask extends AsyncTask<Integer, Integer, String> { 
    @Override 
    protected String doInBackground(Integer... params) { 
     for (; count <= params[0]; count++) { 
      try { 
       Thread.sleep(1000); 

       publishProgress(count); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
     try { 
       JSONObject response = getJSONObjectFromURL("your http link"); // calls method to get JSON object 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return "Task Completed."; 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     progressBar.setVisibility(View.GONE); 



    } 
    @Override 
    protected void onPreExecute() { 
     txt.setText("Task Starting..."); 
    } 
    @Override 
    protected void onProgressUpdate(Integer... values) { 
     txt.setText("Running..."+ values[0]); 
     progressBar.setProgress(values[0]); 
    } 
} 

这里是类从HTTP GET JSON和解析它。当调用方法传入url时,您希望从中获取json对象。

public static JSONObject getJSONObjectFromURL(String urlString) throws IOException, JSONException { 

    HttpURLConnection urlConnection = null; 

    URL url = new URL(urlString); 

    urlConnection = (HttpURLConnection) url.openConnection(); 

    urlConnection.setRequestMethod("GET"); 
    urlConnection.setReadTimeout(10000 /* milliseconds */); 
    urlConnection.setConnectTimeout(15000 /* milliseconds */); 

    urlConnection.setDoOutput(true); 

    urlConnection.connect(); 

    BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream())); 

    char[] buffer = new char[1024]; 

    String jsonString = new String(); 

    StringBuilder sb = new StringBuilder(); 
    String line; 
    while ((line = br.readLine()) != null) { 
     sb.append(line+"\n"); 
    } 
    br.close(); 

    jsonString = sb.toString(); 

    System.out.println("JSON: " + jsonString); 
    urlConnection.disconnect(); 

    return new JSONObject(jsonString); 
}