0

アプリケーションに Salesforce を統合しています。アプリケーションにChatter フィードを表示する必要があり、その過程で、Chatter Rest Api のすべての機能 (投稿、データの取得、コメント、いいね! など) を実行しましたが、できません。 Chatter API にあらゆる種類の添付ファイルをアップロードします

次のリンクを参照しました。

https://github.com/gauravkheterpal/boxForce/blob/master/src/com/metacube/boxforce/SalesForceObjectChooser.java

https://github.com/noeticpenguin/CasePhotographer/blob/master/src/com/brightleafsoftware/casephotographer/CaseDetailFragment.java

Salesforce Mobile SDK for android を使用してファイルをアップロードするにはどうすればよいですか? </p>

私のコード:

 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);
            }
        });
    } 

ChatterでアップロードしたいonActivityResult ファイルパスを取得した後、このメソッドを呼び出しています。

次のメソッドは、画像を 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 本文がある場合にのみ発生することを理解していますが、ここで何が間違っているのかわかりませんでした。

ここに何が欠けているのか理解できません。助けてください。

4

1 に答える 1

0

私が気づいたことの1つは、間違っているということです

fields.put("ParentID", "ユーザー ID");

代わりに変数parentIdにする必要があります

于 2016-07-25T13:31:04.727 に答える