㈠ Android studio使用Retrofit框架,Get發送請求,Gson解析返回的json數據時報錯怎麼辦
資料庫一直以來給我的感覺就是——麻煩!!!
接觸了Realm之後才終於可以開開心心的使用資料庫了。
本文總結一些Realm資料庫的常用知識點,包括多線程訪問,以及如何與Retrofit2.0一起使用等...
看懂這些知識點之後,個人認為就可以在一般的項目中使用Realm了。
1. model類必須extends RealmObject,所有屬性必須用private修飾
2. model中支持基本數據結構:boolean, byte, short, ìnt, long, float, double, String, Dateand byte[]
3.若要使用List必須用RealmList<T>,或者繼承RealmList
4.與Retrofit2.*一起使用,通過Gson來解析Json數據並直接生成RealmObject,可參考如下寫法:
[java] view plain
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
㈡ 如何使用Retrofit獲取伺服器返回來的JSON字元串
public String getWebContent(String url) { /帆凱/ 創建一個http請求對象 HttpGet request = new HttpGet(url); // 創建HttpParams以用來設置HTTP參數 HttpParams params = new BasicHttpParams(); // 設置連接超時或響應超時 // HttpConnectionParams.setConnectionTimeout(params, 3000); // HttpConnectionParams.setSoTimeout(params, 5000); // 創建一個網路訪問處理對象 HttpClient httpClient = new DefaultHttpClient(params); try { // 執行請求參數項 HttpResponse response = httpClient.execute(request); // 判斷是叢轎御否請求成功 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 獲得響應信息 String content = EntityUtils.toString(response.getEntity()); return content; } else { // 網連接失敗,使用Toast顯示提示信息 Toast.makeText( context, context.getResources().... public String getWebContent(String url) { // 創建一個http請求對象 HttpGet request = new HttpGet(url); // 創建HttpParams以用來設置HTTP參數 HttpParams params = new BasicHttpParams(); // 設置連接超時或響應超時 // HttpConnectionParams.setConnectionTimeout(params, 3000); // HttpConnectionParams.setSoTimeout(params, 5000); // 創滲岩建一個網路訪問處理對象 HttpClient httpClient = new DefaultHttpClient(params); try { // 執行請求參數項 HttpResponse response = httpClient.execute(request); // 判斷是否請求成功 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 獲得響應信息 String content = EntityUtils.toString(response.getEntity()); return content; } else { // 網連接失敗,使用Toast顯示提示信息 Toast.makeText( context, context.getResources().getString( R.string.connected_fails), 3000).show(); } } catch (Exception e) { // e.printStackTrace(); } finally { // 釋放網路連接資源 httpClient.getConnectionManager().shutdown(); } return null; }content:即為json數據。
㈢ android Retrofit 的post請求方式的參數用換成json么
1. JSON的數據格式
a) 按照最簡單的形式,可以用下面這樣的 JSON 表示名稱內/值對:
{ "firstName": "Brett" }
b) 可以創建包含多個名稱/值對的記容錄,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" }
c) 可以創建值的數組
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" }
]}
d) 當然,可以使用相同的語法表示多個值(每個值包含多個記錄):
㈣ 如何使用Retrofit獲取伺服器返回來的JSON字元串
只需簡單一行代碼,就能拿到伺服器返回的JSON字元串了
ZhixueApiUtil.getInstance().getZhixueApi().getCouponList(new Callback<Response>() {
@Override
public void success(Response response, Response response1) {
//注意這里用第一個Response參數的
String jsonString = new String(((TypedByteArray) response.getBody()).getBytes());
//再使用Retrofit自帶的JSON解析(或者別的什麼)
Coupon coupon = new Gson().fromJson(jsonString, Coupon.class);
......
}
@Override
public void failure(RetrofitError error) {
......
}
});
㈤ Retrofit @body的使用
retrofit中有什燃州指么註解 ,但是對於@body網上講解不是很多,現在我們來分析下@body
首先我們要明白的是後台傳參數的方式最常皮配用的分為了get與post,get的參數是跟在url後面的,但是post的參數是放在請求體裡面傳給後台的,但是兩種方式傳表單數據的話,傳給後台的參數字元串是一樣的,只是get跟在url後,post放在請求體裡面的,參數的形式都是以
這樣的方式傳參的,但是還有一種就是傳json數據,get跟post都是把json放在body中傳送給後台的。
retrofit一般傳表單的數據是這樣的:
底層自動封裝成一個請求體,並通過這個註解來把這些參數封裝成一個參數字元串傳給後台!
如果是傳json的話是這樣的:
與上邊的區別就是沒得了@FormUrlEncoded來標志是表單數據,並且用的@body 裡面的參數就是java中的bean對象!
這是最常用的兩種方式,但是對於參數過多的表單數據按照第一種方式來寫的話工程量有點大,有沒得一種像post提交json這樣的方式來提交表單數據跡消呢?
別急,方法是這樣的,也是使用@body:
注意這里照樣沒有@FormUrlEncoded,而且@body後面跟的是請求體,相當於我們直接給後端傳一個我們自定義的請求體,而不用retrofit註解來用底層封裝,但是這個傳的RequestBody要進行自己封裝,加上參數必須的=,&符號,像下邊這樣:
封裝數據這樣封裝:
封裝RequestBody這樣封裝,把上邊的HashMap<String, String>包裝的參數傳進來:
再把返回的這個RequestBody傳入到上邊的方法中,這樣就實現了傳遞post表單的方法!
其實get中的有 @GET("weather/index")
也可以通過@QueryMap 來提交大量數據,這里就不過多說了
㈥ 如何通過Retrofit提交Json格式數據
本文將介紹如何通過retrofit庫post一串json格凱棚襪式的數據。首先post的json數據格式如下:
{
"Id": "string",
"DeviceId": "string",
"Name": "string",
"SumDistance": 0,
"RouteNo": "string",
"SumPoints": 0,
"SetupTime": "2016-06-10T13:11:00.766Z",
"UsedTime": 0,
"Points": [
{
"Id": "string",
"RouteNo": "string",
"Name": "string",
"Longitude": "string",
"Latitude": "string"和檔,
"Height": 0,
"Distance": 0,
"Yaw": 0,
"Pitch": 0,
"Speed": 0,
"Usedtime": 0
}
]
}
通過安裝Android studio gsonformat插件,根據上面的json格式自動生成一個Bean類,本文命名為FlyRouteBean,
[java] view plain
package com.example.administrator.retrofitex;
import java.util.List;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by Administrator on 2016/6/10.
*/
public class FlyRouteBean{
/**
* Id : string
* DeviceId : string
* Name : string
* SumDistance : 0
* RouteNo : string
* SumPoints : 0
* SetupTime : 2016-05-23T06:20:50.254Z
* UsedTime : 0
* Points : [{"Id"盯激:"string","RouteNo":"string","Name":"string","Longitude":"string","Latitude":"string","Height":0,"Distance":0,"Yaw":0,"Pitch":0,"Speed":0,"Usedtime":0}]
*/
public String Id;
public String DeviceId;
public String Name;
public double SumDistance;
public String RouteNo;
public int SumPoints;
public String SetupTime;
public double UsedTime;
/**
* Id : string
* RouteNo : string
* Name : string
* Longitude : string
* Latitude : string
* Height : 0
* Distance : 0
* Yaw : 0
* Pitch : 0
* Speed : 0
* Usedtime : 0
*/
public List<PointsBean> Points;
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
public String getDeviceId() {
return DeviceId;
}
public void setDeviceId(String DeviceId) {
this.DeviceId = DeviceId;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public double getSumDistance() {
return SumDistance;
}
public void setSumDistance(double SumDistance) {
this.SumDistance = SumDistance;
}
public String getRouteNo() {
return RouteNo;
}
public void setRouteNo(String RouteNo) {
this.RouteNo = RouteNo;
}
public int getSumPoints() {
return SumPoints;
}
public void setSumPoints(int SumPoints) {
this.SumPoints = SumPoints;
}
public String getSetupTime() {
return SetupTime;
}
public void setSetupTime(String SetupTime) {
this.SetupTime = SetupTime;
}
public double getUsedTime() {
return UsedTime;
}
public void setUsedTime(double UsedTime) {
this.UsedTime = UsedTime;
}
public List<PointsBean> getPoints() {
return Points;
}
public void setPoints(List<PointsBean> Points) {
this.Points = Points;
}
public static class PointsBean implements Parcelable {
public String Id;
public String RouteNo;
public String Name;
public String Longitude;
public String Latitude;
public double Height;
public double Distance;
public double Yaw;
public double Pitch;
public double Speed;
public double Usedtime;
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
public String getRouteNo() {
return RouteNo;
}
public void setRouteNo(String RouteNo) {
this.RouteNo = RouteNo;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public String getLongitude() {
return Longitude;
}
public void setLongitude(String Longitude) {
this.Longitude = Longitude;
}
public String getLatitude() {
return Latitude;
}
public void setLatitude(String Latitude) {
this.Latitude = Latitude;
}
public double getHeight() {
return Height;
}
public void setHeight(double Height) {
this.Height = Height;
}
public double getDistance() {
return Distance;
}
public void setDistance(double Distance) {
this.Distance = Distance;
}
public double getYaw() {
return Yaw;
}
public void setYaw(double Yaw) {
this.Yaw = Yaw;
}
public double getPitch() {
return Pitch;
}
public void setPitch(double Pitch) {
this.Pitch = Pitch;
}
public double getSpeed() {
return Speed;
}
public void setSpeed(double Speed) {
this.Speed = Speed;
}
public double getUsedtime() {
return Usedtime;
}
public void setUsedtime(double Usedtime) {
this.Usedtime = Usedtime;
}
@Override
public String toString() {
return "PointsBean{" +
"Id='" + Id + '\'' +
", RouteNo='" + RouteNo + '\'' +
", Name='" + Name + '\'' +
", Longitude='" + Longitude + '\'' +
", Latitude='" + Latitude + '\'' +
", Height=" + Height +
", Distance=" + Distance +
", Yaw=" + Yaw +
", Pitch=" + Pitch +
", Speed=" + Speed +
", Usedtime=" + Usedtime +
'}';
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(Id);
dest.writeString(RouteNo);
dest.writeString(Name);
dest.writeString(Longitude);
dest.writeString(Latitude);
dest.writeDouble(Height);
dest.writeDouble(Distance);
dest.writeDouble(Yaw);
dest.writeDouble(Pitch);
dest.writeDouble(Speed);
dest.writeDouble(Usedtime);
}
public static final Creator<PointsBean> CREATOR=new Creator<PointsBean>() {
@Override
public PointsBean createFromParcel(Parcel source) {
// TODO Auto-generated method stub
PointsBean pointsBean=new PointsBean();
pointsBean.setId(source.readString());
pointsBean.setRouteNo(source.readString());
pointsBean.setName(source.readString());
pointsBean.setLongitude(source.readString());
pointsBean.setLatitude(source.readString());
pointsBean.setHeight(source.readInt());
pointsBean.setDistance(source.readInt());
pointsBean.setYaw(source.readInt());
pointsBean.setPitch(source.readInt());
pointsBean.setSpeed(source.readInt());
pointsBean.setUsedtime(source.readInt());
return pointsBean;
}
@Override
public PointsBean[] newArray(int size) {
// TODO Auto-generated method stub
return new PointsBean[size];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
}
@Override
public String toString() {
return "FlyRouteBean{" +
"Id='" + Id + '\'' +
", DeviceId='" + DeviceId + '\'' +
", Name='" + Name + '\'' +
", SumDistance=" + SumDistance +
", RouteNo='" + RouteNo + '\'' +
", SumPoints=" + SumPoints +
", SetupTime='" + SetupTime + '\'' +
", UsedTime=" + UsedTime +
", Points=" + Points +
'}';
}
}