개발 사례 PM 2.5 실시 간 모니터링
7808 단어 안 드 로 이 드 개발 노트
이번 개발 에 필요 한 지식:
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;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
OkHttp 프레임 워 크 2 차 패키지, post json 형식의 인자 (상)args, priargs、pub_args 등 이 필드 들 은 모두 같 지 않 기 때문에 본 글 에 포 장 된 프레임 워 크 는 직접 가 져 와 서 사용 할 수 없 을 수도 있 습 니 다. 사용 할 때 url 과 co...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.