Hey Chris, thanks for reporting this. Unfortunately, nothing is ringing a bell as to why this might be happening.
For the purposes of possibly isolating the issue, would it be possible for you to re-test against the latest master branch version of the couchbase lite code? See https://github.com/couchbase/couchbase-lite-android#getting-the-pre-built-jars--maven-artifacts or https://github.com/couchbase/couchbase-lite-android#zipfile-that-includes-jars for instructions. Another angle that might be productive is if you could put this document + attachment on a publicly accessible CouchDB server (eg, on IrisCouch or Cloudant) and I can try to sync with a Couchbase Lite instance in our test lab. On Thu, Aug 7, 2014 at 1:37 AM, Chris Donnelly <[email protected]> wrote: > > > I've recently upgraded the android app I'm working on from an old > unsupported version of CBL Android to version 1.0.1. > The app replicates to/from a CouchDB (v1.5) instance using the Replication > class where with the old CBL I used the Ektorp API. > > When I fetch a locally stored Document with an html attachment, the output > is scrambled as per below: > > Before utf-8 encoding: > > uSMo@W?=4JG"BġV8c{ٝMuM$>X|y/.gq*J -;g2ú7Ӽ~dSJoa`uO0vlJ1Dr27_ > > 1 > > OhKj1AOp-* > > #zNHyYd٢[ޒҨaondNgB4J"G$ep4Ld&pFzrYګv+ > > r~ > > ,14`,1<WnREI > > uhtlG2g-F|3j9TJk†?̒McŃ34kOh;qkOmJxJFʹSȊpZ#-ƋÒ.]?Tw%w<-c=6ͭS > > p\|q&yaߠ{hUjMO씱eIVTI > > tX\>!?7u!% > > After utf-8 encoding: > %1F%EF%BF%BD%08%00%00%00%00%00%00%03uSMo%EF%BF%BD%40%10%EF%BF%BDW%EF%BF%BD%3F%0C%3D4%12J%13%EF%BF%BDG%1A%22%EF%BF%BDB%C4%A1%EF%BF%BD%EF%BF%BDV%EF%BF%BD8%EF%BF%BD%EF%BF%BDc%7B%EF%BF%BD%EF%BF%BD%D9%9DM%EF%BF%BD%10%EF%BF%BD > etc etc.. > > Relevant code is below: > > > /** > > * Load an attachment from the Couch database and set the result > in the view on the UI thread. Two views are currently supported, {@link > WebView} for HTML and {@link ImageView} for pngs > > * > > * @param view > > * @param activity > > * @param portalItemBase > > */ > > public static void loadAttachment(final View view, final Activity > activity, final PortalItemBaseNode portalItemBase, final String > inAttachmentID) { > > AsyncTask<Void, Void, Object> task = new AsyncTask<Void, > Void, Object>() { > > private ProgressDialog progress; > > private static final int TYPE_WEB = 1; > > private static final int TYPE_IMAGE = 2; > > private static final int TYPE_IMAGE_SCALEABLE = 3; > > private int mType; > > private Matrix imageMatrix; > > @Override > > protected void onPreExecute() { > > if (view instanceof WebView) { > > mType = TYPE_WEB; > > } else if (view instanceof ImageViewTouch) > { > > mType = TYPE_IMAGE_SCALEABLE; > > } else if (view instanceof ImageView) { > > mType = TYPE_IMAGE; > > } > > progress = ProgressDialog.show(activity, > activity.getString(R.string.please_wait), activity.getString(R.string. > loading)); > > } > > @Override > > protected Object doInBackground(Void... arg0) { > > String dbName = SevenCityApplication. > getModel().getSelectedSitting().getDatabaseName(); > > String attachmentName = > getFirstAttachmentName(portalItemBase); > > InputStream in = SevenCityApplication. > getModel().getSyncer().getAttachment(dbName, portalItemBase.getId(), > attachmentName); > > if (in != null) { > > if (mType == TYPE_WEB) { > > String result = ""; > > try { > > result = > inputStreamAsString(in); > > in.close(); > > } catch (IOException e) { > > e.printStackTrace > (); > > } > > return result; > > } else if (mType == TYPE_IMAGE || > mType == TYPE_IMAGE_SCALEABLE) { > > Bitmap b = BitmapFactory. > decodeStream(in); > > try { > > in.close(); > > } catch (IOException e) { > > e.printStackTrace > (); > > } > > return b; > > } > > } > > return null; > > } > > @Override > > protected void onPostExecute(Object result) { > > if (DebugHandler.LOG_ENABLED) { > > DebugHandler.log(this, "LOADED " + > (result != null) + " " + mType); > > } > > if (result != null) { > > if (mType == TYPE_WEB) { > > try { > > String encoding = > UTF_8; > > String data = > URLEncoder.encode((String) result, encoding).replaceAll("\\+", " "); > > DebugHandler.log( > this, "Before "+encoding+" encoding: "+result+"\nAfter "+encoding+" > encoding: "+data); > > ((WebView) view). > loadData(data, MIME_TYPE_TEXT_HTML, UTF_8); > > } catch ( > UnsupportedEncodingException e) { > > e.printStackTrace > (); > > } > > } else if (mType == TYPE_IMAGE) { > > ((ImageView) view). > setImageBitmap((Bitmap) result); > > } else if (mType == > TYPE_IMAGE_SCALEABLE) { > > if (null == imageMatrix) { > > imageMatrix = new > Matrix(); > > } else { > > imageMatrix = (( > ImageViewTouch) view).getDisplayMatrix(); > > } > > ((ImageViewTouch) view). > setImageBitmap((Bitmap) result); > > } > > } else { > > if (DebugHandler.LOG_ENABLED) { > > DebugHandler.log(this, > "Attachment > is null " + portalItemBase.getId()); > > } > > } > > progress.dismiss(); > > } > > }; > > if (android.os.Build.VERSION.SDK_INT <= android.os.Build. > VERSION_CODES.HONEYCOMB) { > > task.execute(); > > } else { > > task.executeOnExecutor(AsyncTask. > THREAD_POOL_EXECUTOR); > > } > > } > > /** > > * Get the name of the first attachement of the {@link > CouchDbDocument} supplied > > * > > * @param doc > > * @return > > */ > > public static String getFirstAttachmentName(CouchDbDocument doc) { > > List<String> attachmentNames = doc.getDocument(). > getCurrentRevision().getAttachmentNames(); > > for(String attachmentName : attachmentNames) { > > return attachmentName; > > } > > return null; > > } > > /** > > * Read an input stream into a String > > * > > * @param stream > > * @return > > * @throws IOException > > */ > > public static String inputStreamAsString(InputStream stream) > throws IOException { > > BufferedReader br = new BufferedReader(new > InputStreamReader(stream)); > > StringBuilder sb = new StringBuilder(); > > String line = null; > > try { > > while ((line = br.readLine()) != null) { > > sb.append(line + "\n"); > > } > > } catch (IOException e) { > > e.printStackTrace(); > > } finally { > > br.close(); > > stream.close(); > > } > > return sb.toString(); > > } > > /** > > * Get the attachment from the DB dbName > > * > > * @param dbName > > * @param id > > * @param attachmentId > > * @return > > */ > > public InputStream getAttachment(String dbName, String id, String > attachmentId) { > > InputStream ret = null; > > if (id == null || attachmentId == null) { > > return null; > > } else { > > Database structuralDB; > > try { > > structuralDB = SevenCityApplication.getDatabase( > dbName); > > Document doc = structuralDB.getDocument(id > ); > > > > Revision rev = doc.getCurrentRevision(); > > Attachment att = rev.getAttachment( > attachmentId); > > if(att != null) { > > ret = att.getContent(); > > } > > } catch (CouchbaseLiteException e) { > > e.printStackTrace(); > > } > > return ret; > > } > > } > > > The attachment content type is text/html. The thnl rendered fine with the > old CBL/Ektorp setup. > > Do I have to process the InputStream in method inputStreamAsString differently > with CBL 1.0.x? > > -- > You received this message because you are subscribed to the Google Groups > "Couchbase Mobile" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/mobile-couchbase/32ebbd25-f552-4435-a549-b558a79fae45%40googlegroups.com > <https://groups.google.com/d/msgid/mobile-couchbase/32ebbd25-f552-4435-a549-b558a79fae45%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Couchbase Mobile" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/mobile-couchbase/CACSSHCFkeZ8AX%3DkkjCLP5R54KeVPz3q-DZgh_JE_QgkH-Fp6%3DQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
