2015-01-10 43 views
0

我在Android上使用CouchBase Lite并希望连接到我在Cloudant上的在线数据库。我有一些代码,但它不会工作:Android + Cloudant + CouchBase =错误404

public class MainActivity extends ActionBarActivity { 
final String TAG = "CouchBase"; 
Manager manager; 
String dbname = "foimess"; 
Database database; 
URL syncUrl; 
public static final String SYNC_URL = "https://drmenko.cloudant.com/"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    try { 
     manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS); 
     Log.d (TAG, "Manager created"); 
    } catch (IOException e) { 
     Log.e(TAG, "Cannot create manager object"); 
     return; 
    } 

    if (!Manager.isValidDatabaseName(dbname)) { 
     Log.e(TAG, "Bad database name"); 
     return; 
    } 

    try { 
     database = manager.getDatabase(dbname); 
     Log.d (TAG, "Database created"); 
    } catch (CouchbaseLiteException e) { 
     Log.e(TAG, "Cannot get database"); 
     return; 
    } 

     try { 
      syncUrl = new URL(SYNC_URL + dbname); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Replication push = database.createPushReplication(syncUrl); 
     Replication pull = database.createPullReplication(syncUrl); 
     pull.setContinuous(true); 
     push.setContinuous(true); 
     com.couchbase.lite.auth.Authenticator auth = new BasicAuthenticator("user", "pass"); 
     push.setAuthenticator(auth); 
     pull.setAuthenticator(auth); 

     push.addChangeListener(new Replication.ChangeListener() { 
      @Override 
      public void changed(Replication.ChangeEvent event) { 
       // will be called back when the push replication status changes 
      } 
     }); 
     pull.addChangeListener(new Replication.ChangeListener() { 
      @Override 
      public void changed(Replication.ChangeEvent event) { 
       // will be called back when the pull replication status changes 
      } 
     }); 
     push.start(); 
     pull.start(); 


} 

我在logcat中收到此:

01-10 20:06:15.202: E/RemoteRequest(25122): Got error status: 404 for https://drmenko.cloudant.com/foimess/_session. Reason: Object Not Found 
01-10 20:06:15.202: D/Sync(25122): %s: return false 
01-10 20:06:15.202: E/RemoteRequest(25122): Got error status: 404 for https://drmenko.cloudant.com/foimess/_session. Reason: Object Not Found 
01-10 20:06:15.202: D/Sync(25122): %s: return false 
01-10 20:06:15.312: D/dalvikvm(25122): GC_CONCURRENT freed 304K, 6% free 7331K/7751K, paused 14ms+5ms, total 78ms 
01-10 20:06:15.902: E/RemoteRequest(25122): Got error status: 404 for https://drmenko.cloudant.com/foimess_session. Reason: Object Not Found 
01-10 20:06:15.902: D/Sync(25122): %s: return false 
01-10 20:06:15.902: E/Sync(25122): [email protected]: Session check failed 
01-10 20:06:15.902: E/Sync(25122): org.apache.http.client.HttpResponseException: Object Not Found 
01-10 20:06:15.902: E/Sync(25122): at com.couchbase.lite.support.RemoteRequest.executeRequest(RemoteRequest.java:217) 
01-10 20:06:15.902: E/Sync(25122): at com.couchbase.lite.support.RemoteRequest.run(RemoteRequest.java:101) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:150) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:264) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
01-10 20:06:15.902: E/Sync(25122): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
01-10 20:06:15.902: E/Sync(25122): at java.lang.Thread.run(Thread.java:856) 
01-10 20:06:15.902: E/Sync(25122): [email protected]: Progress: set error = org.apache.http.client.HttpResponseException: Object Not Found 
01-10 20:06:15.902: E/RemoteRequest(25122): Got error status: 404 for https://drmenko.cloudant.com/foimess_session. Reason: Object Not Found 
01-10 20:06:15.902: D/Sync(25122): %s: return false 
01-10 20:06:15.912: E/Sync(25122): [email protected]: Session check failed 
01-10 20:06:15.912: E/Sync(25122): org.apache.http.client.HttpResponseException: Object Not Found 
01-10 20:06:15.912: E/Sync(25122): at com.couchbase.lite.support.RemoteRequest.executeRequest(RemoteRequest.java:217) 
01-10 20:06:15.912: E/Sync(25122): at com.couchbase.lite.support.RemoteRequest.run(RemoteRequest.java:101) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:150) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:264) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
01-10 20:06:15.912: E/Sync(25122): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
01-10 20:06:15.912: E/Sync(25122): at java.lang.Thread.run(Thread.java:856) 
01-10 20:06:15.912: E/Sync(25122): [email protected]: Progress: set error = org.apache.http.client.HttpResponseException: Object Not Found 
01-10 20:12:52.262: E/ActivityThread(25122): Activity com.goran.helloworldcouchbase.MainActivity has leaked IntentReceiver com.couchbase.lite.android.[email protected] 41335210 that was originally registered here. Are you missing a call to unregisterReceiver()? 
01-10 20:12:52.262: E/ActivityThread(25122): android.app.IntentReceiverLeaked: Activity com.goran.helloworldcouchbase.MainActivity has leaked IntentReceiver com.couchbase.lite.android.[email protected] 41335210 that was originally registered here. Are you missing a call to unregisterReceiver()? 
01-10 20:12:52.262: E/ActivityThread(25122): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:792) 
01-10 20:12:52.262: E/ActivityThread(25122): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593) 
01-10 20:12:52.262: E/ActivityThread(25122): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1120) 
01-10 20:12:52.262: E/ActivityThread(25122): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1107) 
01-10 20:12:52.262: E/ActivityThread(25122): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1101) 
01-10 20:12:52.262: E/ActivityThread(25122): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:365) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.android.AndroidNetworkReachabilityManager.startListening(AndroidNetworkReachabilityManager.java:50) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.NetworkReachabilityManager.addNetworkReachabilityListener(NetworkReachabilityManager.java:26) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.replicator.ReplicationInternal.initNetworkReachabilityManager(ReplicationInternal.java:299) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.replicator.ReplicationInternal.start(ReplicationInternal.java:239) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.replicator.ReplicationInternal$11.doIt(ReplicationInternal.java:1037) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.replicator.ReplicationInternal$11.doIt(ReplicationInternal.java:1033) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.github.oxo42.stateless4j.StateConfiguration$3.doIt(StateConfiguration.java:135) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.github.oxo42.stateless4j.StateConfiguration$3.doIt(StateConfiguration.java:133) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.github.oxo42.stateless4j.StateRepresentation.executeEntryActions(StateRepresentation.java:118) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.github.oxo42.stateless4j.StateRepresentation.enter(StateRepresentation.java:97) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.github.oxo42.stateless4j.StateMachine.publicFire(StateMachine.java:199) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.github.oxo42.stateless4j.StateMachine.fire(StateMachine.java:126) 
01-10 20:12:52.262: E/ActivityThread(25122): at com.couchbase.lite.replicator.ReplicationInternal$1.run(ReplicationInternal.java:191) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:150) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:264) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
01-10 20:12:52.262: E/ActivityThread(25122): at java.lang.Thread.run(Thread.java:856) 

我在做什么错?我在代码或服务器上丢失了什么?

+0

已添加Internet权限? – Simas

+0

是的,在清单 –

回答

0

404s的第一个网址,https://drmenko.cloudant.com/foimess/_session,不正确 - 应该是https://drmenko.cloudant.com/_session。这可能意味着没有进一步的请求被正确认证。

+0

行!我现在把SYNC_URL =“https://drmenko.cloudant.com”,现在我得到这个错误: E/Sync(13570):PullerInternal stopGraceful.run()完成 E/Sync(13570):com。 [email protected] checkSessionAtPath()响应:{ok = true,info = {authentication_db = _users,authentication_handlers = [cookie,default],authenticated = default},userCtx = {name = drmenko,roles = [ _admin,_reader,_writer]}} /RemoteRequest(13570):出现错误状态:403 for https://drmenko.cloudant.com/_local/2e7e23499d125a5dd8cfc93247fcc8ba58500c01。原因:禁止 –

+0

因此,网址中仍有一个不正确的网址:https://drmenko.cloudant.com/_local。 https://drmenko.cloudant.com本身不是数据库 - 它在上面的级别。有效的数据库URL将为https://drmenko.cloudant.com/mydb,并且有效的_local doc URL将为https://drmenko.cloudant.com/mydb/_local/somedoc。这听起来像是你的Couchbase Lite的一个问题,但我不得不推迟到Couchbase的人关于什么是正确的设置。 –