① json 怎么解析
一、 JSON (javaScript Object Notation)一种简单的数据格式,比xml更轻巧。
Json建构于两种结构:
1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 如:
{
“name”:”jackson”,
“age”:100
}
2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为闹岁并数组(array)如:
{
“students”:
[
{“name”:”jackson”,“age”:100},
{“name”:”michael”,”age”:51}
]
}
二、java解析JSON步骤
A、服务器端将数据转换成json字符串
首先、服务器端项目要导入json的jar包和json所依赖的jar包至builtPath路径下(这些可以到JSON-lib官网下载:http://json-lib.sourceforge.net/)
然后将数据转液迹为json字符串,核心函数是:
public static String createJsonString(String key, Object value)
{
JSONObject jsonObject = new JSONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
B、客户端将json字符串转换为相应的javaBean
1、客雀御户端获取json字符串(因为android项目中已经集成了json的jar包所以这里无需导入)
public class HttpUtil
{
public static String getJsonContent(String urlStr)
{
try
{// 获取HttpURLConnection连接对象
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 设置连接属性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
// 获取相应码
int respCode = httpConn.getResponseCode();
if (respCode == 200)
{
return ConvertStream2Json(httpConn.getInputStream());
}
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
private static String ConvertStream2Json(InputStream inputStream)
{
String jsonStr = "";
// ByteArrayOutputStream相当于内存输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 将输入流转移到内存输出流中
try
{
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)
{
out.write(buffer, 0, len);
}
// 将内存流转换为字符串
jsonStr = new String(out.toByteArray());
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonStr;
}
}
2、获取javaBean
public static Person getPerson(String jsonStr)
{
Person person = new Person();
try
{// 将json字符串转换为json对象
JSONObject jsonObj = new JSONObject(jsonStr);
// 得到指定json key对象的value对象
JSONObject personObj = jsonObj.getJSONObject("person");
// 获取之对象的所有属性
person.setId(personObj.getInt("id"));
person.setName(personObj.getString("name"));
person.setAddress(personObj.getString("address"));
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return person;
}
public static List<Person> getPersons(String jsonStr)
{
List<Person> list = new ArrayList<Person>();
JSONObject jsonObj;
try
{// 将json字符串转换为json对象
jsonObj = new JSONObject(jsonStr);
// 得到指定json key对象的value对象
JSONArray personList = jsonObj.getJSONArray("persons");
// 遍历jsonArray
for (int i = 0; i < personList.length(); i++)
{
// 获取每一个json对象
JSONObject jsonItem = personList.getJSONObject(i);
// 获取每一个json对象的值
Person person = new Person();
person.setId(jsonItem.getInt("id"));
person.setName(jsonItem.getString("name"));
person.setAddress(jsonItem.getString("address"));
list.add(person);
}
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
② android用volley怎么给服务器发送json
1.下载官网的android SDK(本人用的是eclipse)
2.新建一个android项目:
File->new->andriod Application project
7、下面就是具体的使用post和get请求的代码:
A:发送get请求如下:
package com.example.xiaoyuantong;
import java.util.HashMap;
import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
/**
* Demo
*/
public class MainActivity extends Activity {
private RequestQueue requestQueue ;
@Override
protected void onCreate(Bundle savedInstanceState) {
简旁模super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
TextView textView = (TextView)findViewById(R.id.textView);
requestQueue = Volley.newRequestQueue(this);
getJson();
textView.setText("hello");
}
private void getJson(){
String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!register.action?pwd='测试'";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//这里可以打印出接受到返回的json
Log.e("bbb", response.toString());
拦缓}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// System.out.println("sorry,Error");
Log.e("aaa", arg0.toString());
}
});
requestQueue.add(jsonObjectRequest);
}
}
B:发送post请求如下:
package com.example.xiaoyuantong;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class PostActivity extends Activity {
private RequestQueue requestQueue ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.post, menu);
return true;
}
private void init() {
TextView textView = (TextView)findViewById(R.id.postView);
requestQueue = Volley.newRequestQueue(this);
getJson();
textView.setText("hellopost");
}
private void getJson(){
String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!reg.action";
JsonObjectRequest jsonObjectRequest ;
JSONObject jsonObject=new JSONObject() ;
try {
jsonObject.put("name", "张三");
jsonObject.put("sex", "女");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//打印前台向后台要提交的post数据
Log.e("post",jsonObject.toString());
//发送post请求
try{
jsonObjectRequest = new JsonObjectRequest(
Request.Method.POST, url, jsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//打印请求后获取的json数据
Log.e("bbb", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// System.out.println("sorry,Error");
Log.e("aaa", arg0.toString());
}
});
requestQueue.add(jsonObjectRequest);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e + "");
}
requestQueue.start();
}
}
8、在android的logcat里面能查看到打印的请求
(红色的显示的是我在后台请求到数据)
有时候logcat显示不出数据,可能是消息被过滤了,可以在左边点击“减号”删除过滤
在server端,也就是在myeclipse的建立的另一个后台工程里面能获取到请求:
9、后续会补充json数据的解析部分,以及过度到移动云的部分,上面只是c/s模式下的一个简单的基于http的请求应答例子。
③ Android点击短信链接打开App之App Link 技术实现(亲证篇)
学习资料:
Android 点击Url(短信链接)打开App 的调研与实现
Google App Link 技术实现(亲证篇)
AppLinks使用详解
实现方式分:Deep linking 与 Android App Links
Deep linking方式实现:具体可以参考 Android 点击Url(短信链接)打开App 的调研与实现
Android App Links方式实现
第一步 验证一个服务器地址(例如https://asuss.ryit.co),成功验证通过后,当用户在短信中点击于类似https://asuss.ryit.co/login的web链接,即可打开app本地相关页面,我们在AndroidMenifest的启动页进行配置
第二步 assetlinks.json文件制作 Android Studio中Tools>App Link Assistants
这个文件只能放在https的链接中,不管你之前在action中声明的是http或者https
第三步 验证
1)打开浏览器访问https://asuss.ryit.co/.well-known/assetlinks.json,正常应该看到该文件内容输出。
2)访问google api,查看app是否通过App Links验证(需翻墙这步一定要做,有人反馈如果不做这步还是deeplink)
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://asuss.ryit.co(替换你的服务器名)&relation=delegate_permission/common.handle_all_urls
3)在短信中编辑https://asuss.ryit.co,之后点击url直接跳转到应用中省去了跳转到浏览器的选择跳转过程
注意:图中url为个人虚拟url了,替换即可
散花,爱你们,我的安卓老兄弟们,安卓老姐们,我踩完坑了。
④ 请问android怎样通过json数据从服务器获取图片
android里面,通过json数据是不会直接返回图片的,只会返回图片的url地址。
步骤: 1,通过解析json数据,获取到图片的地址。
2,通过图片的地址,再一次的请求网络(用异步任务或者hangdler里面请求网络:比如:
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
BufferedInputStream is = new BufferedInputStream(conn.getInputStream());
)
3 通过BitmapFactory.decodeStream(里面的参数是一个字节流),该方法返回的是一个bitmap ,直接用imageview.setimagebitmap()就能展示图片了。
说明: 在BitmapFactory.decodeStream这里返回的bitmap可以做进一步的优化,比如二次采样,把获取的bitmap存sd卡等等。。
⑤ Android:使用OkHttp发送HTTPGet请求,并解析所得的JSON数据。
在Android开发中,OkHttp作为首选的网络通信库,因其简单易用和高效性能而广受欢迎。本文将指导你如何使用OkHttp发送HTTPGet请求,并解析返回的JSON数据。
步骤如下:
1. 首先,你需要在项目中添加OkHttp依赖。在`build.gradle`中添加相关代码,OkHttp会自动下载并集成到你的项目中。
2. 创建一个`OkHttpClient`实例,接着创建一个`Request`对象。虽然初始对象是空的,但后续可以通过Builder方法添加请求细节。
3. 调用`OkHttpClient`的`newCall(Request)`方法创建`Call`对象,并通过`execute()`方法发送GET请求。服务器返回的数据存储在`response`中。
4. 对于POST请求,构建`RequestBody`,使用`POST`方法进行数据提交,同样通过`execute()`获取响应数据。
5. 数据通常以JSON格式传输,Android中常用Gson进行解析。例如,你可以创建一个JavaBean类,然后通过Gson将JSON转换为对象。
6. 数据解析后,你可以将其展示在UI上,如创建一个MainActivity来演示。
7. 如果遇到重定向问题,记得调整`request.url()`。对于JSON文件的解析,只需根据Gson的API调整代码即可。
8. 最后,确保你的项目环境中已经安装了必要的服务,如Tomcat,以便进行JSON文件的读取和解析。
通过以上步骤,你将能够熟练地在Android应用中使用OkHttp发送HTTP请求,并解析JSON数据。记得根据项目需求灵活调整和优化你的网络请求和数据处理代码。