2016-07-25 5 views
0

Я интегрирую Salesforce в свое приложение. Мне нужно показать канал чата в моем приложении, и в этом процессе я выполнил все функции Chatter Rest Api (Posting, Извлечение данных, комментариев, комментариев и т. Д.), Но Я не могу загрузить какое-либо приложение в болтовню API.Не удается загрузить изображение или вложение в Salesforce chatter Rest 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

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 я не нашел, что неправильно я делаю здесь.

Я не могу понять, что мне здесь не хватает. Пожалуйста, помогите.

ответ

0

Одна вещь, которую я заметил, что это неправильно является

fields.put("ParentID", "The user id");

, который должен быть переменной ParentID вместо

+0

Да know.I целенаправленно написано «ИД пользователя» здесь вместо фактического идентификатора пользователя. – kgandroid