我正在尝试在我的应用程序中实现haystack.ai API。我阅读了文档。我需要帮助来更改代码中的某些内容。
在文档中的示例代码中,您提供了图像的路径。我需要让用户从图库中选择图片(我知道该怎么做),然后将图片转换为字节数组。 那就是我尝试过的:
onSelect: function(event) {
setTimeout(function(that) { if (<my condition>) that.toolbar.disable('w2ui-delete'); }, 1, this);
}
}
logcat说:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rate);
backBtn = findViewById(R.id.back_btn);
image = findViewById(R.id.imageRated);
if (getIntent().getExtras() != null) {
imageUri = Uri.parse(getIntent().getStringExtra("uri"));
image.setImageURI(imageUri);
}
backBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RateActivity.this, MainActivity.class);
startActivity(intent);
}
});
try {
getScore();
} catch (IOException e) {
e.printStackTrace();
}
}
public void getScore() throws IOException {
URL url = new URL("https://api.haystack.ai/api/image/analyze?output=json&apikey=myapikey");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
byte[] imageData = FileUtils.readFileToByteArray(new File(imageUri.toString()));
OutputStream os = new BufferedOutputStream(conn.getOutputStream());
os.write(imageData);
os.close();
InputStream is = conn.getInputStream();
byte[] buffer = new byte[1024];
ByteArrayOutputStream responseBuffer = new ByteArrayOutputStream();
while (true) {
int n = is.read(buffer, 0, buffer.length);
if (n <= 0) {
break;
}
responseBuffer.write(buffer, 0, n);
}
String response = responseBuffer.toString("UTF-8");
Log.v("Score", response);
}
--->
RateActivity.getScore(Unknown Source:12) at line 62
我也尝试过:
byte[] imageData = FileUtils.readFileToByteArray(new File(imageUri.toString()));
文档中的原始代码为:
byte[] imageData = FileUtils.readFileToByteArray(new File(imageUri.getPath()));
我需要将所选图片转换为imageData数组。 我该怎么办?
答案 0 :(得分:0)
从您的问题看来,您想将图像URI转换为 byteArray。
在这种情况下,您可以尝试以下代码。
public void convertUriToByteArray(String uri)
{
ByteArrayOutputStream bArray = new ByteArrayOutputStream();
FileInputStream fIn = null;
try {
fIn = new FileInputStream(new File(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte[] buf = new byte[1024];
int n;
try {
while (-1 != (n = fIn.read(buf)))
bArray.write(buf, 0, n);
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes = bArray.toByteArray();
}