从Java返回base64字符串
基本上我有一个图像,我已经转换成Base64字符串。下面的代码是如何将其转换为Base64字符串以及我如何尝试返回它。这是对phonegap插件的修改,因此请原谅某些东西的命名从Java返回base64字符串,java,eclipse,Java,Eclipse,基本上我有一个图像,我已经转换成Base64字符串。下面的代码是如何将其转换为Base64字符串以及我如何尝试返回它。这是对phonegap插件的修改,因此请原谅某些东西的命名 package org.apache.cordova; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.
package org.apache.cordova;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Base64;
import android.view.View;
public class Screenshot extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
// starting on ICS, some WebView methods
// can only be called on UI threads
final Plugin that = this;
final String id = callbackId;
super.cordova.getActivity().runOnUiThread(new Runnable() {
//@Override
@TargetApi(8)
public void run() {
View view = webView.getRootView();
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
if (!folder.exists()) {
folder.mkdirs();
}
File f = new File(folder, "screenshot_" + System.currentTimeMillis() + ".png");
System.out.println(folder);
System.out.println("screenshot_" + System.currentTimeMillis() + ".png");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String base64String = Base64.encodeToString(b, Base64.DEFAULT);
String mytextstring = "data:image/png;base64,"+base64String;
System.out.println(mytextstring);
that.success(new PluginResult(PluginResult.Status.OK), mytextstring);
}
});
PluginResult imageData = new PluginResult(PluginResult.Status.NO_RESULT);
imageData.setKeepCallback(true);
System.out.println("imageData:==================================================================================>>>>>"+imageData);
return imageData;
}
}
这一行:
System.out.println(mytextstring);
输出base64字符串,但此行:
System.out.println("imageData:==================================================================================>>>>>"+imageData);
没有。我试图让imageData包含base64string,我可以返回它并在一些Javascript中使用它。我已经玩了一段时间的代码现在没有成功,我是新的Java,所以真的不知道我有多接近。有人能指引我吗
编辑我只想返回base64字符串,其他什么都不想 我认为这是您代码中的错误。我将尝试从纯java的角度提供几种方法 创建“PluginResult”对象时,不会以任何方式将其连接到已创建的字符串(base64string变量) 如果要返回base64编码字符串,应执行以下操作:
PluginResult imageData = new PluginResult(..., ..., base64string, ..., ...)
或者,如果您没有构造函数,请尝试使用如下setter(例如):
如果没有公开的API,很难理解如何正确使用PluginResult类型的对象(我自己从未使用过)
如果你看到没有什么东西适合你的需要,但是你绝对要使用插件结果对象,而不是你可以考虑创建一个包含插件结果和编码字符串的类,并将它用作方法的返回类型。像这样:
class MyPluginResult {
private PluginResult pluginResult;
private String encodedString;
/*
....
getters/setters/constructors go here
*/
}
而不是让你的方法返回MyPluginResult,改变创建PluginResult并返回它的代码,你就会没事了
希望这有帮助我对Cordova和PhoneGap不太了解,但是通过API查看,您有构造函数
public PluginResult(状态状态,字符串消息)
我想您可以将
base64String
传递给该构造函数的第二个参数。消息被转换为JSON字符串格式,但您可以轻松地在java/javascript中处理该格式
希望这有帮助。关于调用此的代码。成功是不正确的。应该是:
that.success(new PluginResult(PluginResult.Status.OK, mytextstring), id);
您拥有它的方式:
that.success(new PluginResult(PluginResult.Status.OK), mytextstring);
告诉回调服务器在“mytextstring”处调用成功回调。显然,“mytextstring”中没有存储回调,因为这是您的结果
此外,屏幕截图插件的默认.js文件并没有提供一种通过成功/失败回调调用它的方法。因此,您需要修改.js代码,以便使用base64数据调用成功的回调。在Screenshot.js中添加如下内容:
Screenshot.prototype.getBase64Screenshot = function(successCallback, errorCallback) {
exec(successCallback, errorCallback, "Screenshot", "saveScreenshot", []);
};
然后,您可以通过执行以下操作来调用它:
window.plugins.screenshot.getBase64Screenshot(function(data) {
console.log("Data = " + data);
}, function() {
console.log("We got an error");
});
显然,您将提供自己的成功和失败回调。我们没有足够的代码来说明。这似乎与回调系统有关。您创建了imageData,但没有将mytextstring设置为它。我已经包含了java的完整代码和PluginResult方法/函数。PluginResult的实际输出和toString()实现是什么?打印的实际输出是什么?
window.plugins.screenshot.getBase64Screenshot(function(data) {
console.log("Data = " + data);
}, function() {
console.log("We got an error");
});