2012-03-28 7 views
5

Ho fatto alcune domande simili su SO ma nessuna di esse riguarda IO.Impossibile convertire in modo implicito il tipo 'System.IO.Stream' in 'Java.IO.InputStream'

Avevo usato lo stesso codice in java quando ho usato Eclipse. Quella volta ha funzionato.

Ma ora provo a utilizzare questo codice in Mono for Android (C#), non funziona.

Sto cercando di eseguire questo codice per creare un InputStream:

InputStream myInput =ctx.Assets.Open(DATABASE_NAME + ".db"); 

Ma mi sta dando in fase di compilazione errore: Cannot implicitly convert type 'System.IO.Stream' to 'Java.IO.InputStream'

V'è una funzione diretta per copiare un file da attività alla memoria del dispositivo ma richiede il percorso di origine e destinazione.

Come ottengo il percorso di origine ???

Come sono principiante assoluto a Mono for Android, qualsiasi aiuto apprezzato.

+0

Sembra che non trovi il Java e codice di Mono, è possibile utilizzare uno dei due, ma non entrambi insieme – Kai

+0

Ma allora come faccio a porta sopra riga di codice? – GAMA

+0

Devi convertire tutto il tuo caffè Java in Mono. C'è qualche ragione per cui vuoi scrivere in Mono se vuoi eseguire il programma su Android? – Kai

risposta

8

Mono per Android converte alcuni costrutti Java in costrutti .NET "equivalenti" per facilitare la condivisione del codice tra piattaforme simili a .NET. Come parte di questo, java.io.InputStream e java.io.OutputStream sono associati a System.IO.Stream, quindi gli errori del compilatore.

Esiste qualcosa che è necessario su InputStream che non esiste su System.IO.Stream?

Esiste una funzione diretta per copiare un file dalle risorse alla memoria del dispositivo ma che richiede il percorso di origine e destinazione.

Non ho idea del metodo InputStream a cui ti riferisci qui. È possibile utilizzare Stream.CopyTo(Stream) per farlo:

Stream asset = context.Assets.Open(DATABASE_NAME + ".db"); 
string dbPath = System.IO.Path.Combine(
     System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), 
     "YourFile.xml"); 
using (var dest = System.IO.File.OpenWrite(destPath)) 
    asset.CopyTo(dest);