【Android开发】JSON格式传送网络信息

本文介绍了如何在Android客户端和Web应用之间使用JSON格式进行网络信息传递和解析的方法,包括Servlet的修改、创建接收JSON数据的JSP文件以及Android客户端的适配。

根据上一个案例:http://blog.youkuaiyun.com/acmman/article/details/38755237

下午又写了关于安卓网络传输的另外一种方法,采用JSON格式进行网络信息传递并解析。

 

用的WEB应用与Android客户端都是在上一个样例的基础上改写的。

 

WEB应用端

Servlet有所变化

package deu.hpu.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import deu.hpu.servise.dima.News;
import deu.hpu.servise.impl.VideoNewsService;
import deu.hpu.servise.impl.VideoNewsServiceImpl;
 
public class ListServlet extends HttpServlet {
    private VideoNewsService service=new VideoNewsServiceImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        doPost(request,response);
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
           List<News> videos=service.getLastNews();
           //得到请求参数
           String format=request.getParameter("format");
           //如果是以json的请求参数,就以就向客户端返回json格式的数据,否则就返回XML格式的数据
           if("json".equals(format)){
        	   StringBuilder builder=new StringBuilder();
        	   builder.append('[');
        	   for(News news:videos){
        	    builder.append('{');
        	    builder.append("id:").append(news.getid()).append(',');
        	    builder.append("title:\"").append(news.getTitle()).append("\",");
        	    builder.append("timelength:").append(news.getTimelength());
        	    builder.append("},");
        	   }
        	   builder.deleteCharAt(builder.length()-1);
        	   builder.append(']');
        	   request.setAttribute("json", builder.toString());
        	   request.getRequestDispatcher("/WEB-INF/Page/jsonvideonews.jsp").forward(request, response);
           }
           else{
        	   request.setAttribute("videos", videos);
               request.getRequestDispatcher("/WEB-INF/Page/videonews.jsp").forward(request, response);  
           } 
}
 
}


相应的,在WEB-INF/Page下创建了新的JSP文件,用来接受request带过来的json数据,并描述成json数据的格式

相比XML格式的,json属于普通文本格式。代码很简单:

<%@ page language="java" import="java.util.*" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}

完成,之后在地址栏输入

http://10.20.124.72:8080/videonews/ListServlet?format=json

注意:后面必须加?format=json,不然无法以json格式输出数据!!

 

效果:


Android客户端:

 

我们在VedioService业务类中新增getJSONLastNews() 与parseJSON()两个方法,用来得到json数据和解析json数据以 List形式返回

/*
 * 获取最新的视频资讯
 * */
     public static List<News> getJSONLastNews() throws Exception{
    	 String path="http://10.20.124.72:8080/videonews/ListServlet?format=json";
    	 URL url=new URL(path);
         HttpURLConnection conn=(HttpURLConnection) url.openConnection();
    	 conn.setConnectTimeout(5000);
    	 conn.setRequestMethod("GET");
    	 if(conn.getResponseCode()==200){
    	  InputStream instream=conn.getInputStream();
    	  return parseJSON(instream);
    	 }
    	 return null;
     }
/*
 * 解析JSON数据
 * */
private static List<News> parseJSON(InputStream instream) throws Exception{
List<News> newses=new ArrayList<News>();
byte [] data=streamTool.read(instream);
String json=new String(data);
//将String格式的json文本转换为数组格式
JSONArray array=new JSONArray(json);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject=array.getJSONObject(i);
News news=new News(jsonObject.getInt("id"),jsonObject.getString("title"),jsonObject.getInt("timelength"));
newses.add(news);
}
return newses;
}


运行之后,安卓客户端以json形式接受数据,运行效果:


### Android 中以 JSON 格式向服务器发送数据 在 Android 开发中,可以通过 `HTTP` 协议中的 `POST` 方法来实现将 JSON 数据发送到服务器的功能。以下是具体实现过程: #### 1. 准备工作 为了能够通过网络请求发送数据,需要确保应用具有互联网权限。这可以在项目的 `AndroidManifest.xml` 文件中声明如下: ```xml <uses-permission android:name="android.permission.INTERNET"/> ``` #### 2. 创建 JSON 对象 可以使用 Android 提供的原生类库 `org.json.JSONObject` 来创建 JSON 数据对象。 ```java import org.json.JSONObject; // 构建 JSON 对象 JSONObject jsonObject = new JSONObject(); try { jsonObject.put("key1", "value1"); jsonObject.put("key2", "value2"); } catch (Exception e) { e.printStackTrace(); } String jsonString = jsonObject.toString(); // 转换为字符串形式以便于传输 ``` #### 3. 发送 POST 请求 利用 `HttpURLConnection` 或第三方库(如 OkHttp、Retrofit),可以构建并发送带有 JSON 数据体的 HTTP POST 请求。 ##### 使用 HttpURLConnection 的示例代码 ```java import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; URL url = new URL("https://example.com/api"); // 替换为目标地址 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); // 设置允许输出流写入数据 connection.setRequestProperty("Content-Type", "application/json; utf-8"); byte[] outBytes = jsonString.getBytes("UTF-8"); OutputStream os = connection.getOutputStream(); os.write(outBytes); os.flush(); os.close(); int responseCode = connection.getResponseCode(); // 获取响应码 if (responseCode == HttpURLConnection.HTTP_OK) { System.out.println("Data sent successfully!"); } connection.disconnect(); ``` 上述代码片段展示了如何设置 `Content-Type` 头部字段为 `"application/json"` 并将 JSON 字符串作为主体内容传递给目标服务器[^1]。 #### 4. 错误处理与优化建议 实际开发过程中还需要考虑异常捕获机制以及线程管理等问题,因为网络操作不可阻塞主线程。推荐采用异步任务或者专门框架简化流程控制逻辑。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值