首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中运行prolog

在Android中运行prolog
EN

Stack Overflow用户
提问于 2012-04-16 07:04:26
回答 3查看 2.6K关注 0票数 1

我正在安卓系统中测试tuProlog。我有一个活动TuProlog,类解析器与prolog代码和包含prolog代码的data.pl交互。我可以把它作为一个输出到控制台的java项目运行得很好,但是作为一个Android项目我却遇到了麻烦。对于Android,我得到了FileNotFoundException,尽管我的文件data.pl被复制到项目的根目录中,在src和我的包中。我只想以字符串的形式获取结果,并在TextView中显示结果。以下是我的代码

代码语言:javascript
复制
public class TuProlog extends Activity implements OnClickListener{

TextView tv;
Button b1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv = (TextView)findViewById(R.id.label);
    b1 = (Button)findViewById(R.id.button1);
    b1.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Parser custom = new Parser();
    String result = custom.parse();
    tv.setText(result);
}   
}


public class Parser {

Prolog engine;
PrintStream orgStream   = System.out;

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream psout = new PrintStream(baos, Boolean.TRUE); // Using autoFlush
String myResult ;

public String parse()
{
    engine  = new Prolog();
    try{
        Theory t = new Theory(new FileInputStream("data.pl"));
        try{
            engine.setTheory(t);
            try{
                SolveInfo answer = engine.solve("likes(john,X).");
                try{
                    Term derivative = answer.getTerm("X");
                    return myResult;;
                }
                catch (NoSolutionException e){
                    e.printStackTrace();
                }
                catch (UnknownVarException e){
                    e.printStackTrace();
                }
            }
            catch (MalformedGoalException e){
                e.printStackTrace();
            }
        }
        catch (InvalidTheoryException e){
            e.printStackTrace();
        }
    } 
    catch (FileNotFoundException e){
        e.printStackTrace();
    }
    catch (IOException e){
        e.printStackTrace();
    }
    return null;
}
    @Override
public void onSpy(SpyEvent e) {
    // TODO Auto-generated method stub
    Log.d("TAG", "** LG'd onSpy => SpyEvent Occured ** " );
    System.out.println("** onSpy => SpyEvent Occured ** \n ");
    myResult =  e.getMsg();
}


@Override
public void onOutput(OutputEvent e) {
    // TODO Auto-generated method stub
     Log.d("TAG", "** LG'd: onOutput => OutputEvent Occured ** " );
        System.out.println("** onOutput => OutputEvent Occured ** \n ");
        myResult =  e.getMsg();

}


@Override
public void onWarning(WarningEvent e) {
    // TODO Auto-generated method stub
    Log.d("TAG", "** LG'd: onWarning => WarningEvent Occured ** " );
    System.out.println("** onWarning => WarningEvent Occured ** \n ");
    myResult = e.getMsg();
}
}

Data.pl

代码语言:javascript
复制
likes(john,mary).
likes(mary,wine).

这是我的日志输出,我不知道System.err

代码语言:javascript
复制
04-15 18:51:25.480: W/System.err(23813): java.io.FileNotFoundException: /data.pl (No such file or directory)
04-15 18:51:25.484: W/System.err(23813): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
04-15 18:51:25.484: W/System.err(23813): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
04-15 18:51:25.484: W/System.err(23813): at java.io.FileInputStream.<init>(FileInputStream.java:80)
04-15 18:51:25.484: W/System.err(23813): at java.io.FileInputStream.<init>(FileInputStream.java:132)
04-15 18:51:25.484: W/System.err(23813): at com.tuprolog.alicia.Parser.parse(Parser.java:32)
04-15 18:51:25.484: W/System.err(23813): at com.tuprolog.alicia.TuProlog.onClick(TuProlog.java:51)
04-15 18:51:25.484: W/System.err(23813): at android.view.View.performClick(View.java:2485)
04-15 18:51:25.484: W/System.err(23813): at android.view.View$PerformClick.run(View.java:9080)
04-15 18:51:25.484: W/System.err(23813): at android.os.Handler.handleCallback(Handler.java:587)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 14:40:06

我之前已经做过了,并且已经发布了(非常,非常好的概念证明)用于审问的源代码,请参见下面。

要下载Eclipse (Helios)项目源代码,请转到: versaggi.biz,下载Adrea、TuProlog Dev project、Eclipse (Helios) Java Source Project,最后下载TuProlog Android Eclipse Porject Source。这应该会让你开始学习。请记住,这只是概念代码的证明,在最终版本发布之前将被完全重写。考虑到这一点,它确实足够让你深入了解我是如何做的。如果您需要任何帮助,请直接与我联系,我很乐意帮助您。:-)

票数 1
EN

Stack Overflow用户

发布于 2012-04-16 13:08:11

我得到FileNotFoundException,即使我的文件data.pl被复制到项目的根目录中

但是看看这个错误:

java.io.FileNotFoundException: /data.pl (没有这样的文件或目录)

它正在尝试从文件系统的根目录读取data.pl!

您可以尝试使用FileInputStream(File)构造函数来更好地控制路径。以如何获取应用程序目录的this问题为例。

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 01:56:13

在eclipse中,在项目的res文件夹中创建一个文件夹"plFiles“,然后将pl文件移到这个文件夹中(例如: res/plFiles/data.pl)

  • Use
  1. plFiles
  2. (a是当前活动))。

行上的InputStream in = a.getResources().openRawResource(R.plFiles.data);

  • The返回一个InputStream。您现在可以使用扫描器或BufferedReader或任何您喜欢的阅读器类来继续解析或读取文件。

这里提到了另一种访问文件的方法... Access resource files in Android

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10166942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档