По отношение на папката с активи и променливите на средата на android

Моят код гласи

package com.fyp.jwi;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import edu.mit.jwi.Dictionary;
import edu.mit.jwi.IDictionary;
import edu.mit.jwi.item.IIndexWord;
import edu.mit.jwi.item.IWord;
import edu.mit.jwi.item.IWordID;
import edu.mit.jwi.item.POS;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

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

    ---->  String wnhome = "file:///android_asset/";   <----
     String path = wnhome + File.separator + " dict ";
     URL url = null;
     try{ url = new URL("file", null, path); } 
          catch(MalformedURLException e){ try {
            e.printStackTrace();
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } }
          if(url == null) return;

     // construct the dictionary object and open it
     IDictionary dict = new Dictionary ( url);
     try {
        dict.open ();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

     // look up first sense of the word "dog "
     IIndexWord idxWord = dict . getIndexWord ("dog", POS. NOUN );
     IWordID wordID = idxWord . getWordIDs ().get (0) ;
     IWord word = dict . getWord ( wordID );
     System .out . println ("Id = " + wordID );
     System .out . println (" Lemma = " + word . getLemma ());
     System .out . println (" Gloss = " + word . getSynset (). getGloss ());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

Кодът, който подчертах с помощта на '-->', беше първоначално

String wnhome = System.getenv("WNHOME");

Където WNHOME е променлива на средата, която препраща към директорията, където на вашия компютър се намират определени файлове за подпомагане на Java wordnet api. Това работи добре, когато компилирам кода. Имам нужда от самостоятелна Java програма на моя компютър.

Прикачих изображение, за да направя нещата по-ясни въведете описание на изображението тук

Сега знам как да задавам и използвам променливи на средата на Windows. Как да го направя на android? И групирам ли тези файлове по правилния начин? Има ли друг начин да го направя?

ИЛИ има ли заобиколно решение, което не включва задаване на променлива на средата? Някой запознат с това или JWI да ми помогне?


person Srini    schedule 08.02.2014    source източник
comment
във вашия код --› wnhome + File.separator ‹-- но вече има файлов разделител в края на wnhome   -  person Pararth    schedule 08.02.2014
comment
така че казвате, че трябва да премахна '/' в края на file:///android_asset/?   -  person Srini    schedule 08.02.2014
comment
Android има концепцията за променливи на средата, но те едва ли ще ви помогнат, тъй като променлива на средата на устройството с Android, сочеща към местоположение на вашата машина за разработка, ще бъде безполезна, тъй като нямате достъп до това хранилище от там. Създайте интересуващите ви файлове в APK или ги поставете в паметта на устройството и информирайте приложението за тяхното местоположение по начин, по-подобен на Java.   -  person Chris Stratton    schedule 08.02.2014
comment
да.. или премахнете + File.separator в следващия ред   -  person Pararth    schedule 08.02.2014
comment
@ChrisStratton някакъв съвет как да се справя с това? трябва ли да добавя папката dict към sd картата и след това да добавя разрешение за съхранение за четене в манифеста?   -  person Srini    schedule 08.02.2014
comment
@user2450263, което все още кара приложението ми да се срива :(   -  person Srini    schedule 08.02.2014
comment
Или активите, или външното хранилище са обща възможност с различни компромиси. Но има малка полза от използването на променлива на средата, тъй като приложението ви ще трябва да я зададе, както и да я прочете (като разработчик на трета страна, няма да можете да задавате предварително зададените променливи на средата, които приложението ви наследява от zygote )   -  person Chris Stratton    schedule 08.02.2014
comment
така че текущият начин, който използвам за препратка към папката с активи, е правилен?? файловете с данни в папката с активи вече ще бъдат пакетирани с apk?   -  person Srini    schedule 08.02.2014
comment
@SrinivasSuresh Успяхте ли да заредите WordNet файловете в Android в крайна сметка?   -  person almightyGOSU    schedule 07.02.2016
comment
Не, научих се да изтривам уеб и написах api за изтриване на wordnet. github.com/thewickedaxe/WonetLib . Умолявам ви и ви умолявам да не използвате това извън кутията. Написах го, докато тъкмо изучавах java, следователно качеството на кода е гадно. Но работи   -  person Srini    schedule 17.02.2016