Android 네트워크 프로 그래 밍 에서 네트워크 의 JSon 데이터 인 스 턴 스 가 져 오기
14362 단어 Android네트워크 프로 그래 밍JSON
1.서버 쪽 만 들 기:
서버 쪽 프로젝트 구조:
서버 쪽 실행 효과 도:
STEP 1:비 즈 니스 생 성에 필요 한 자바 빈
package com.jph.sj.model;
import java.util.Date;
/**
*
* @author jph
* Date:2014.09.26
*/
public class News {
private Integer id;
private String title;
private Date publishDate;
public News(Integer id, String title, Date publishDate) {
this.id = id;
this.title = title;
this.publishDate = publishDate;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
}
두 번 째 단계:비 즈 니스 논리 인터페이스 와 구체 적 인 실현 클래스 만 들 기비 즈 니스 인터페이스:
package com.jph.sj.service;
import java.util.List;
import com.jph.sj.model.News;
public interface NewsService {
/**
*
* @return
*/
public List<News> getLastNews();
}
비 즈 니스 인터페이스의 실현 클래스:
package com.jph.sj.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.jph.sj.model.News;
import com.jph.sj.service.NewsService;
public class NewsServiceBean implements NewsService {
/**
*
* @return
*/
public List<News> getLastNews(){
List<News> newes = new ArrayList<News>();
newes.add(new News(1, " ", new Date(System.currentTimeMillis())));
newes.add(new News(2, " ", new Date(System.currentTimeMillis()+8200)));
newes.add(new News(3, " ",new Date(System.currentTimeMillis()-6000)));
return newes;
}
}
세 번 째 단계:컨트롤 러 Servlet 만 들 기
package com.jph.sj.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jph.sj.model.News;
import com.jph.sj.service.NewsService;
import com.jph.sj.service.impl.NewsServiceBean;
/**
* :http://xxx/NewsListServlet/NewsListServlet
*/
public class NewsListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private NewsService newsService = new NewsServiceBean();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<News> newes = newsService.getLastNews();//
//[{id:20,title:"xxx",timelength:90},{id:10,title:"xbx",timelength:20}]
StringBuilder sbJson = new StringBuilder();
// list Json
sbJson.append('[');
for(News news : newes){
sbJson.append('{');
sbJson.append("id:").append(news.getId()).append(",");
sbJson.append("title:\"").append(news.getTitle()).append("\",");
sbJson.append("publishDate:").append(news.getPublishDate().getTime());
sbJson.append("},");
}
sbJson.deleteCharAt(sbJson.length() - 1);//
sbJson.append(']');
request.setAttribute("json", sbJson.toString());
request.getRequestDispatcher("/WEB-INF/page/jsonnewslist.jsp").forward(request, response);
}
}
STEP 4:jsonnewslist.jsp 페이지 만 들 기
<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>
${json}
이 서버 엔 드 프로젝트 가 완료 되 었 습 니 다.다음은 안 드 로 이 드 엔 드 항목 을 만 들 기 시작 합 니 다.2.안 드 로 이 드 엔 드 만 들 기:
Android 엔 드 프로젝트 구조:
STEP 1:비 즈 니스 생 성에 필요 한 자바 빈
알림:서버 쪽 과 안 드 로 이 드 쪽 프로젝트 는 자바 언어 로 이 루어 지기 때문에 일부 구성 요 소 는 공유 할 수 있 습 니 다.자바 빈 은 그 중의 하나 입 니 다.이때 우 리 는 안 드 로 이 드 엔 드 프로젝트 를 구축 할 때 서버 엔 드 프로젝트 에서 자바 빈 을 사용 할 수 있 습 니 다.
두 번 째 단계:안 드 로 이 드 엔 드 프로젝트 의 비 즈 니스 논리 층 만 들 기
핵심 코드:GetAndParseJson:
package com.jph.gj.service;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.jph.model.News;
import android.os.Handler;
import android.os.Message;
/**
* Json
* @author jph
* Date:2014.09.26
*/
public class GetAndParseJson {
private String url="http://10.219.61.117:8080/ServerForJSON/NewsListServlet";
public static final int PARSESUCCWSS=0x2001;
private Handler handler;
public GetAndParseJson(Handler handler) {
// TODO Auto-generated constructor stub
this.handler=handler;
}
/**
* XML
*/
public void getJsonFromInternet () {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
HttpURLConnection conn=(HttpURLConnection) new URL(url).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode()==200) {
InputStream inputStream=conn.getInputStream();
List<News>listNews=parseJson(inputStream);
if (listNews.size()>0) {
Message msg=new Message();
msg.what=PARSESUCCWSS;// UI Json
msg.obj=listNews;// UI
handler.sendMessage(msg);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
/**
* json List
* @param inputStream
* @return List
*/
protected List<News> parseJson(InputStream inputStream) {
// TODO Auto-generated method stub
List<News>listNews=new ArrayList<News>();
byte[]jsonBytes=convertIsToByteArray(inputStream);
String json=new String(jsonBytes);
try {
JSONArray jsonArray=new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jObject=jsonArray.getJSONObject(i);
int id=jObject.getInt("id");
String title=jObject.getString("title");
long time=jObject.getLong("publishDate");
News news=new News(id, title, new Date(time));
listNews.add(news);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listNews;
}
/**
* ByteArray
* @param inputStream
* @return ByteArray
*/
private byte[] convertIsToByteArray(InputStream inputStream) {
// TODO Auto-generated method stub
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte buffer[]=new byte[1024];
int length=0;
try {
while ((length=inputStream.read(buffer))!=-1) {
baos.write(buffer, 0, length);
}
inputStream.close();
baos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toByteArray();
}
}
세 번 째 단계:Activity 만 들 기
package com.jph.gj.activity;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jph.gj.R;
import com.jph.gj.service.GetAndParseJson;
import com.jph.model.News;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.widget.ListView;
import android.widget.SimpleAdapter;
/**
* Json
* @author jph
* Date:2014.09.26
*/
public class MainActivity extends Activity {
private List<News>listNews;
private ListView list;
Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case GetAndParseJson.PARSESUCCWSS:
listNews=(List<News>) msg.obj;
initData();
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list=(ListView)findViewById(R.id.list);
GetAndParseJson getAndParseJson=new GetAndParseJson(mHandler);
getAndParseJson.getJsonFromInternet();
}
/**
* xml ListView
*/
protected void initData() {
// TODO Auto-generated method stub
List<Map<String, Object>>items=new ArrayList<Map<String,Object>>();
for (News news:listNews) {
Map<String, Object>item=new HashMap<String, Object>();
item.put("id", news.getId());
item.put("title", news.getTitle());
item.put("time", convertDate(news.getPublishDate()));
items.add(item);
}
SimpleAdapter adapter=new SimpleAdapter(this, items, R.layout.line, new String[]
{"id","title","time"}, new int[]{R.id.tvId,R.id.tvTitle,R.id.tvTime});
list.setAdapter(adapter);
}
private String convertDate(Date publishDate) {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
return sdf.format(publishDate);
}
}
이로써 안 드 로 이 드 엔 드 프로젝트 가 완료 되 었 습 니 다.다음은 앱 실행 효 과 를 살 펴 보 자.Android 실행 효과 도:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.