개발 사례 PM 2.5 실시 간 모니터링

개발 사례 PM 2.5 실시 간 모니터링
이번 개발 에 필요 한 지식:
1.      JSON 형식의 데이터 분석.
2.      Andorid 에서 URL 과 AsyncTask 를 사용 하여 네트워크 데 이 터 를 불 러 옵 니 다.
 
JSON 형식의 데이터 분석:
         JSON 형식의 데 이 터 는 앞에서 언급 되 었 습 니 다. 여기 서 언급 되 지 않 았 습 니 다. JSON 형식의 데이터 조작 은 원본 데이터 의 형식 으로 정 해 야 합 니 다. 이 예 에서 JSON 의 조작 은 모든 데 이 터 를 제공 하 는 것 과 관련 되 지 않 고 첫 번 째 데이터 에 대한 간단 한 진행 작업 만 예 로 들 어야 합 니 다.
1. 데 이 터 는 먼저 JSONarray 의 배열 대상 에 저 장 됩 니 다.
2. 그리고 JSONobject 대상 을 만들어 array. getJSONobject (0) 를 호출 합 니 다.첫 번 째 대상 을 가 져 옵 니 다.
3. 첫 번 째 대상 을 가 져 온 후에 그의 키 값 은 배열 이 므 로 JSONarray 대상 을 만들어 해당 하 는 값 을 가 져 옵 니 다.
4. 마지막 으로 각종 데 이 터 를 출력 합 니 다.
(자세 한 내용 은 코드 참조)
 
네트워크 데이터 로드
1. 이번 데이터 의 출처:http://aqicn.org/publishingdata/json이 사 이 트 는 실시 간 pm 2.5 실시 간 모니터링 데 이 터 를 제공 할 수 있 습 니 다. 인 코딩 방식 은 utf - 8 입 니 다. 이 사 이 트 는 URL 로 열 리 고 구체 적 인 코드 는?
                   newURL("http://aqicn.org/publishingdata/json").openStream(),"utf-8")
 
2. JAVA 의 URL 소개
JAVA 의 URL 은 JAVA 네트워크 프로 그래 밍 의 일부분 으로 자바. net. URL 에 있 습 니 다.우 리 는 URL 을 통 해 자원 을 얻 을 수 있다.종류 URL 통 일 된 자원 포 지 셔 닝 부 호 를 대표 하 는데 이것 은 인터넷 의 '자원' 을 가리 키 는 지침 이다.자원 은 간단 한 파일 이나 디 렉 터 리 일 수도 있 고 더 복잡 한 대상 에 대한 참조 일 수도 있 습 니 다. 예 를 들 어 데이터베이스 나 검색엔진 에 대한 조회 일 수도 있 습 니 다.
간단하게 URL 을 프로 토 콜, 호스트 이름, 포트, 경로, 검색 문자열 과 매개 변수 등 대상 으로 이해 할 수 있 습 니 다.단락 마다 독립 적 으로 설정 할 수 있 습 니 다.
응용 프로그램 도 '상대 URL' 을 지정 할 수 있 습 니 다. 다른 URL 에 대한 자원 에 대한 충분 한 정보 만 포함 합 니 다.HTML 페이지 에 서 는 상대 URL 을 자주 사용 합 니 다.
상대 URL 은 URL 의 모든 구성 부분 을 지정 할 필요 가 없습니다.프로 토 콜, 호스트 이름, 포트 번호 가 없 으 면 이 값 은 전체 지정 한 URL 에서 계 승 됩 니 다.
URL 이 URL 의 전 의 를 모 르 기 때문에 같은 URL 의 대등한 인 코딩 과 디 코딩 형식 을 식별 하지 못 합 니 다.
주의, URI 클래스 는 특정한 상황 에서 그 구성 필드 에 대해 전 의 를 실행 합 니 다.사용 을 권장 하 다 URI URL 의 인 코딩 과 디 코딩 을 관리 하고 사용 합 니 다. touri () 와 URI.toURL() 이 두 종류 간 의 전환 을 실현 하 다.
사용 가능 URLEncoder 화해시키다 URLDecoder 클래스, 그러나 HTML 형식의 인 코딩 에 만 적 용 됩 니 다. RFC 2396 에서 정의 한 인 코딩 메커니즘 과 다 릅 니 다.
(이상 자바 API doc 에서 소개 합 니 다)
 
3. AsyncTask 의 소개
AsyncTask 를 접 해 본 적 이 없 기 때문에 프로필 을 복사 해서 붙 여 넣 을 수 밖 에 없어 더 설명 하기 어렵다.AsyncTask 가 바로 이것 을 언급 했다.이 예 에서 AsyncTask 도 이 곳 에서 새로운 스 레 드 를 만 드 는 데 사 용 됩 니 다. 여기에 AsyncTask 의 상세 한 설명 을 첨부 한 사이트 입 니 다. 이 프로필 도 복사 되 어 있 습 니 다.http://www.cnblogs.com/sjrhero/articles/2574883.html
간단 한 소개
Android 모 바 일 클 라 이언 트 를 개발 할 때 다 중 스 레 드 를 사용 하여 작업 을 해 야 합 니 다. 저 희 는 보통 시간 이 걸 리 는 작업 을 단독 스 레 드 에 두 고 실행 하여 메 인 스 레 드 를 점용 하여 사용자 에 게 좋 지 않 은 사용자 체험 을 가 져 다 주지 않도록 합 니 다.그러나 하위 스 레 드 에서 주 스 레 드 (UI 스 레 드) 를 조작 할 수 없습니다. 하위 스 레 드 에서 UI 스 레 드 를 조작 하 는 중 오류 가 발생 할 수 있 습 니 다.따라서 안 드 로 이 드 는 하위 스 레 드 에서 UI 스 레 드 를 업데이트 하고 메 시 지 를 보 내 는 메커니즘 으로 UI 인터페이스 를 업데이트 하여 사용자 에 게 보 여 주 는 Handler 를 제공 합 니 다.이렇게 해서 서브 스 레 드 가 UI 를 업데이트 하 는 문 제 를 해결 했다.그러나 시간 이 걸 리 는 작업 은 항상 익명 의 서브 스 레 드 를 작 동 시 키 고 너무 많은 서브 스 레 드 는 시스템 에 큰 부담 을 주 며 이에 따라 성능 문 제 를 가 져 옵 니 다.따라서 안 드 로 이 드 는 도구 류 AsyncTask 를 제공 하여 말 그대로 비동기 로 작업 을 수행 합 니 다.이 AsyncTask 는 태 어 날 때 부터 배경 에서 비교적 오래 걸 리 는 임 무 를 처리 하여 사용자 에 게 좋 은 사용자 체험 을 가 져 다 주 었 습 니 다. 프로 그래 밍 의 문법 적 으로 많이 우아 해 졌 습 니 다. 서브 스 레 드 와 Handler 가 필요 하지 않 아 도 비동기 작업 을 완성 하고 사용자 인터페이스 를 새로 고 칠 수 있 습 니 다.
        
구체 적 인 소스 코드:
         packagecom.example.loadpm25data;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
importjava.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
 
public class MainActivity extends Activity{
        
         privateTextView tvPmData;
 
   @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       
       
       tvPmData=(TextView) findViewById(R.id.pmData);
       findViewById(R.id.btnReload).setOnClickListener(newView.OnClickListener() {
                           
                            @Override
                            publicvoid onClick(View v) {
                                     //TODO Auto-generated method stub
                                     reloadData();
 
                                    
                            }
                   });
       reloadData();
    }
   
   private void reloadData(){
             tvPmData.setText("Loading...");
            
             newAsyncTask(){
 
                            @Override
                            protectedString doInBackground(Void... params) {
                                    
                                     try{
                                               BufferedReaderreader=new BufferedReader(new InputStreamReader(newURL("http://aqicn.org/publishingdata/json").openStream(),"utf-8"));
                                    
                                               Stringline=null;
                                               StringBuffercontent=new StringBuffer();
                                              
                                               while((line=reader.readLine())!=null  ){
                                                        content.append(line);
                                               }
                                              
                                               reader.close();
                                              
                                               return  content.toString();
                                     }
                                     catch(Exception e) {
                                               e.printStackTrace();
                                     }            
                                     returnnull;
                            }
                           
                                // protected void OnPostExecute(String s){
                          protected void onPostExecute(String s){
                                    
                           
                                       super.onPostExecute(s);
                                     if(s!=null){
                                               try{
                                                        JSONArrayarray=new JSONArray(s);
                                                        JSONObjectfirstjo=array.getJSONObject(0);
                                                       
                                                        JSONArraypollutants=firstjo.getJSONArray("pollutants");
                                                        JSONObjectfipo=pollutants.getJSONObject(0);
                                                        System.out.println("city:"+firstjo.getString("cityName"));
                                                       
                                                        tvPmData.setText(String.format("%s%s:%f",firstjo.get("cityName"),firstjo.getString("localName"),fipo.getDouble("value")));
 
                                               }catch (JSONException e) {
                                                        e.printStackTrace();
                                               }
                                     }
                            }
                      
             }.execute();
    }
 
 
   @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);
       return true;
    }
   
}

 

좋은 웹페이지 즐겨찾기