通过改装安卓系统,将ROOM数据库列表数据发送到阵列中的Body中



我想通过改装将房间数据库保存的数据发送到Body中。我正在将数据保存在Room的列表中,并将通过改造网络库在正文中发送相同的数据。下面是相同的代码。

房间桌类

@Entity(tableName = "cash")
public class Cash implements Serializable {
@PrimaryKey(autoGenerate = true)
private int id;
@SerializedName("UserID")
@ColumnInfo(name = "UserID")
private String UserID;
@SerializedName("FareAmount")
@ColumnInfo(name = "FareAmount")
private String FareAmount;
@SerializedName("TransactionId")
@ColumnInfo(name = "TransactionId")
private String TransactionId;
public String getTransactionId() {
return TransactionId;
}
public void setTransactionId(String transactionId) {
TransactionId = transactionId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserID() {
return UserID;
}
public void setUserID(String userID) {
UserID = userID;
}
public String getFareAmount() {
return FareAmount;
}
public void setFareAmount(String fareAmount) {
FareAmount = fareAmount;
}

Dao接口

@Dao
public interface CashDao {
@Query("Select * from cash ORDER BY id ASC")
List<Cash> getCashList();
@Insert
void insertCash(Cash cash);
@Update
void updateCash(Cash cash);
@Delete
void deleteCash(Cash cash);
@Query("DELETE FROM cash")
void deleteAll();
}

事务数据库类

@Database(entities = {Cash.class}, exportSchema = false, version = 3)
public abstract class TransactionDatabase extends RoomDatabase {
private static final String DB_NAME = "transaction_db";
private static TransactionDatabase instance;
public static synchronized TransactionDatabase getInstance(Context context){
if (instance == null){
instance = 
Room.databaseBuilder(context.getApplicationContext(),TransactionDatabase.class,DB_NAME)
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build();
}
return instance;
}
public abstract CashDao cashDao();
}

主要活动

btn_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cash = new Cash(str_userId, str_fareAmount,str_transactionId);
appDB.cashDao().insertCash(cash);
}
});
btn_upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

List<Cash> cashlist = appDB.cashDao().getCashList();
if(cashlist.size() == 0){
Toast.makeText(MainActivity.this,"Data is already uploaded!",Toast.LENGTH_SHORT).show();
} else {
// upload data code here
}
appDB.cashDao().deleteAll();
}
});

public interface AppServiceAPI{
@POST("/Api/OfflineCashTransaction")
Call<ServiceOfflineAPI> cashtxn(@Body Cash cash);
}

我想通过改装在body json中发送数据,类型将是POST,如下所示。

[{
"UserId":"Test",
"FareAmount":"65",
"TransactionId":202008281139
},{
"UserId":"Test",
"FareAmount":"95",
"TransactionId":202008281140
},{
"UserId":"Test",
"FareAmount":"195",
"TransactionId":202008281156
}]

回复如下:

{
"Status": true,
"Error": "",
"Message": "3 : Transaction  successfully Saved!!.",
"Data": ""
}

这是一个非常宽泛的问题。一个好的做法是将其分解为更简单/更小的问题,并尝试逐一解决它们。

无论如何,使用下面的方法来获得JsonObject:

public JsonObject listToJson(ArrayList<Object> objects) {
JsonArray jsonArray = new Gson().toJsonTree(objects).getAsJsonArray();
JsonObject obj = new JsonObject();
obj.add("my_custom_key", jsonArray);
return obj;
}

要使用改装,您需要一个API接口,如下所示:

public interface APIInterface {
@POST("your_sub_url")
Call<Response<YourResponsePOJO>> sendData(@Header("Content-Type") String contentType, @Body JsonObject body);
}

这将是您的改装客户类别:

public class RetrofitClientInstance {
private static Retrofit retrofit;
private static final String BASE_URL = "your_base_url";
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}

}

这是您期望从服务器得到的POJO响应:

public class MyExpectedResponse<T> {
@SerializedName("errorCode")
public int errorCode;
@SerializedName("errorMessage")
public String errorMsg;
@SerializedName("response")
public T response;
//setter getter methods
}

最后调用API:

public void sendData (JsonObject paramsFromRoom) {
APIInterface apiService =
RetrofitClientInstance.getRetrofitInstance().create(APIInterface.class);
Call<MyExpectedResponse<Void>> call = apiService.sendData("application/json", paramsFromRoom);
call.enqueue(new Callback<MyExpectedResponse<Void>>() {
@Override
public void onResponse(Call<MyExpectedResponse<Void>> call, MyExpectedResponse<Void> response) {

}
@Override
public void onFailure(Call<MyExpectedResponse<Void>> call, Throwable t) {

}
});
}

最新更新