gpt4 book ai didi

android - 如何将Android sqlite BLOB数据上传到MySQL BLOB

转载 作者:行者123 更新时间:2023-11-29 02:57:20 24 4
gpt4 key购买 nike

我正在开发一个项目,用户将一些信息和图像存储到 SQLite 数据库中。图像存储为 BLOB 数据。现在我想将所有数据上传到我的 MySQL 数据库中。我正在使用 Volley 通过调用 Web API 的 AsyncTask 将所有行从 SQLite 逐行上传到 MySQL 服务器。

没有图像 BLOB 数据一切正常。我不知道有什么方法可以使用 Volley 上传 blob 数据。我在 StackOverflow 中进行了很多搜索,但没有找到任何解决方案,请帮助我。

我给出了一些代码示例,以使我的问题更容易理解。

这是我在 AsyncTask 中调用的函数:

/**
* function to upload data into server
* */
private void SyncTaskDoInBack(final dataDB data) {
// Tag used to cancel the request
String tag_string_req = "Inserting Online";

StringRequest strReq = new StringRequest(Method.POST, AppConfig.API_LINK, new Response.Listener<String>() {

@Override
public void onResponse(String response) {
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");

// Check for error node in json
if (!error) {
Log.d(TAG, "Success");
} else {
// Error in found
String errorMsg = jObj.getString("error_msg");
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
}

}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
}
}) {

@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("ID", data._id);
params.put("PersonName", data.pName);
params.put("Photo", data.photo.toString());

return params;
}

};

// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}

我的“dataDB”类如下:

public class dataDB implements Comparable<dataDB>{

String _id = null;
String pName = null;
byte[] photo = null;

@Override
public int compareTo(dataDB o) {
//return title.toLowerCase().compareTo(o.title.toLowerCase());
return 0;
}

}

列表数据模型类如下:

public class ListDataModel {

private int _id;
private String name;
private byte[] image;

public ListDataModel() { }

public ListDataModel(String name, String thumbnailUrl) {
this.name = name;
this.thumbnailUrl = thumbnailUrl;
}

// getting ID
public int getID() {
return this._id;
}

// setting id
public void setID(int keyId) {
this._id = keyId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public byte[] getImage() {
return this.image;
}

public void setImage(byte[] image) {
this.image = image;
}

}

最佳答案

在 StackOverflow 中进行了大量搜索后,我得出了以下公式,它似乎可以将相机图像生成为 Base64 字符串,反之亦然。希望这会帮助其他人。

我正在使用 Apache Commons Codec 从这里进行 Base64 编码/解码 http://commons.apache.org/proper/commons-codec/ (我认为也可以使用 Android 默认的 Base64 类,我也将其用于其他目的)

这是我的onActivityResult 函数

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK)
return;

switch (requestCode) {

case CAMERA_REQUEST:

Bundle extras = data.getExtras();

if (extras != null) {

Bitmap myImage = extras.getParcelable("data");

ByteArrayOutputStream bao = new ByteArrayOutputStream();
myImage.compress(Bitmap.CompressFormat.JPEG, 90, bao);

imageInByte = bao.toByteArray();

imageInBase64Str = Base64.encodeBytes(imageInByte); // using internal class
}

break;
}
}

然后我将 Base64 字符串 imageInBase64Str 传递到我的 SQlite 和 MySQL 在线数据库的插入语句。

当从 SQLite 或 MySQL 获取图像 Base64 编码数据以供查看时,我按以下方式处理我的图像:

 try {
byte[] decodedByte = Base64.decode(imageData, 0);
theImage = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
}catch (IOException io){
Log.d("ViewRecord",io.getMessage());
}

就是这样:)

关于android - 如何将Android sqlite BLOB数据上传到MySQL BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29193270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com