Я интегрирую Salesforce в свое приложение. Мне нужно показать канал чата в моем приложении, и в этом процессе я выполнил все функции Chatter Rest Api (Posting, Извлечение данных, комментариев, комментариев и т. Д.), Но Я не могу загрузить какое-либо приложение в болтовню API.Не удается загрузить изображение или вложение в Salesforce chatter Rest API
Я консультировался следующие ссылки:
How do I upload file using Salesforce Mobile SDK for android?
Мой код:
private void postImageAsAttachment(String parentId, String title,String filepath) {
Map<String, Object> fields = new HashMap<String, Object>();
fields.put("Name", title);
fields.put("ParentID", "The user id");
File file=new File(filepath);
fields.put("Body", encodeFileInBase64(file));
fields.put("ContentType", "image/jpeg");
RestRequest request = null;
try {
request = RestRequest.getRequestForCreate(getString(R.string.api_version), "Attachment", fields);
System.out.println("Request File:"+request);
} catch (Exception ex) {
Log.d(TAG, "sendRequest: ", ex);
Toast.makeText(MyNewsFeed.this, "The file upload failed: " + ex.toString(), Toast.LENGTH_LONG).show();
}
client.sendAsync(request, new RestClient.AsyncRequestCallback() {
@Override
public void onSuccess(RestRequest request, RestResponse result) {
try {
//Do something with JSON result.
// System.out.println("Restresponse--->"+result);
println(result); //Use our helper function, to print our JSON response.
} catch (Exception e) {
e.printStackTrace();
}
EventsObservable.get().notifyEvent(EventsObservable.EventType.RenditionComplete);
}
@Override
public void onError(Exception e) {
e.printStackTrace();
EventsObservable.get().notifyEvent(EventsObservable.EventType.RenditionComplete);
}
});
}
Я называю этот метод из onActivityResult
после выбора пути к файлу, который я хочу загрузить в Chatter.
Следующий метод кодирует изображение в Base64:
private String encodeFileInBase64(File file) {
String fileTxt="";
StringBuilder sb = new StringBuilder();
// StringBuilder sbStr = new StringBuilder((int) (file.length()/3 *
// 8));
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
int bSize = 3000; // 3 * 512;
Log.v("fileLength", String.valueOf(file.length()));
byte[] buf = new byte[bSize];
int len = 0;
while ((len = fin.read(buf)) != -1) {
Log.v("len", String.valueOf(len));// sbStr.append(new
// String(buf, 0, len));
byte[] encoded = Base64.encode(buf, Base64.DEFAULT);
sb.append(new String(encoded, 0, len));
}
Log.v("txtFileWithBuffer", sb.toString());
fin.close();
} catch (IOException e) {
if (null != fin) {
try {
fin.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
String base64EncodedFile = sb.toString();
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) base64EncodedFile.length()];
try {
fileInputStream = new FileInputStream(base64EncodedFile);
fileInputStream.read(bFile);
fileInputStream.close();
fileTxt = Base64.encodeToString(bFile, Base64.DEFAULT);
Log.v("txtFileWithoutBuffer", fileTxt);
return fileTxt;
// encodeImgList.add(encodedImage);
} catch (Exception ex) {
ex.printStackTrace();
return "";
}
// return base64EncodedFile;
}
return fileTxt;
}
Всякий раз, когда я выполнить метод, он дает мне ошибку:
BasicNetwork.performRequest: Unexpected response code 400 for https://ap2.salesforce.com/services/data/v36.0/sobjects/Attachment
07-25 18:41:39.176 26386-26386/com.salesforce.th W/System.err: com.android.volley.ServerError
07-25 18:41:39.176 26386-26386/com.salesforce.th W/System.err: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:179)
07-25 18:41:39.177 26386-26386/com.salesforce.th W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
Я понимаю, что эта ошибка приходит только при наличии неправильный XML или JSON body.But я не нашел, что неправильно я делаю здесь.
Я не могу понять, что мне здесь не хватает. Пожалуйста, помогите.
Да know.I целенаправленно написано «ИД пользователя» здесь вместо фактического идентификатора пользователя. – kgandroid