【问题标题】:Can't find method on extension class:在扩展类上找不到方法:
【发布时间】:2016-08-12 08:34:42
【问题描述】:

您好,我在 Gamemaker: Studio 中制作了一个 android 原生扩展,当我运行游戏并尝试使用该扩展时,我在运行器命令窗口中收到此错误代码:

在扩展类上找不到方法:folderLoader[double, double]

它不会导致游戏崩溃或抛出任何其他错误,它只是在 java 文件中找不到我的方法。我就是这样设置的:

编辑扩展包属性-通用选项卡-

名称- DirectoryPicker

android 复选框打勾

注入清单-

<activity
android:name="${YYAndroidPackageName}.DirectoryPicker"
android:label="DirectoryPicker" />

注入到gradle(激活我的styles.xml)-

compile 'com.android.support:appcompat-v7:+'

编辑扩展包属性-android tab-

类名- DirectoryPicker

权限 - android.permission.WRITE_EXTERNAL_STORAGE

编辑扩展文件属性框-

名称- DirectoryPicker.extension.gmx

初始化函数-设置为文件夹加载器

仅复制到勾选的 android 和 android yyc 框

编辑扩展功能框-

name-folderLoader

外部名称-folderLoader

help-folderLoader(double FolderOnly, double ShowHidden)

return type box-selected double

key and value box-argument 0 double argument1 double

对象的鼠标左键按下事件的调用代码:

folderLoader(1.0, 0.0);

同一对象中的异步事件(设置为社交事件):

var type2 = string(async_load[? "type2"])
var data2 = string(async_load[? "folder"])
if type2 == "folderFound"
{ 
var text = data2;
}

名为 DirectoryPicker.java 的 java 文件

package ${YYAndroidPackageName};
import ${YYAndroidPackageName}.R;
import ${YYAndroidPackageName}.RunnerActivity;
import com.yoyogames.runner.RunnerJNILib;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class DirectoryPicker extends ListActivity {

private static final int EVENT_OTHER_SOCIAL = 70;
public static final String ONLY_DIRS = "onlyDirs";
public static final String SHOW_HIDDEN = "showHidden";
public static final String CHOSEN_DIRECTORY = "chosenDir";
public static final int PICK_DIRECTORY = 43522432;
private File dir;
private boolean onlyDirs = true;
private boolean showHidden = false;


public void folderLoader(double yesOrNo,double noOrYes)
{
if(yesOrNo == 0.0) onlyDirs = false;
if(yesOrNo == 1.0) onlyDirs = true;
if(noOrYes == 0.0) showHidden = false;
if(noOrYes == 1.0) showHidden = true;
findFolders();
}

public void findFolders() {

Bundle extras = getIntent().getExtras();
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        File Root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        dir = new File(Root.getAbsolutePath());
    }
if (extras != null) {
    showHidden = extras.getBoolean(SHOW_HIDDEN, false);
    onlyDirs = extras.getBoolean(ONLY_DIRS, true);
}

setContentView(R.layout.chooser_list);
setTitle(dir.getAbsolutePath());
Button btnChoose = (Button) findViewById(R.id.btnChoose);
String name = dir.getName();
if(name.length() == 0)
    name = "No folders found";
btnChoose.setText(name);
btnChoose.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        returnDir(dir.getAbsolutePath());
    }
});

ListView lv = getListView();
lv.setTextFilterEnabled(true);

if(!dir.canRead()) {
    Context context = getApplicationContext();
    String msg = "Could not read folders.";
    Toast toast = Toast.makeText(context, msg, Toast.LENGTH_LONG);
    toast.show();
    return;
}

final ArrayList<File> files = filter(dir.listFiles(), onlyDirs, showHidden);
String[] names = names(files);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, names));


lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(!files.get(position).isDirectory())
            return;
        String path = files.get(position).getAbsolutePath();
        Intent intent = new Intent((RunnerActivity.CurrentActivity), DirectoryPicker.class);
        intent.putExtra(DirectoryPicker.SHOW_HIDDEN, showHidden);
        intent.putExtra(DirectoryPicker.ONLY_DIRS, onlyDirs);
        (RunnerActivity.CurrentActivity).startActivityForResult(intent, PICK_DIRECTORY);
    }
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PICK_DIRECTORY && resultCode == RESULT_OK) {
    Bundle extras = data.getExtras();
    String path = (String) extras.get(DirectoryPicker.CHOSEN_DIRECTORY);
    returnDir(path);
int dsMapIndex = RunnerJNILib.jCreateDsMap(null, null, null);
RunnerJNILib.DsMapAddString( dsMapIndex, "type2", "folderFound" );
RunnerJNILib.DsMapAddString( dsMapIndex, "folder", path );
RunnerJNILib.CreateAsynEventWithDSMap(dsMapIndex, EVENT_OTHER_SOCIAL);
}
}

private void returnDir(String path) {
Intent result = new Intent();
result.putExtra(CHOSEN_DIRECTORY, path);
setResult(RESULT_OK, result);
finish();
}

public ArrayList<File> filter(File[] file_list, boolean onlyDirs, boolean showHidden) {
ArrayList<File> files = new ArrayList<File>();
for(File file: file_list) {
    if(onlyDirs && !file.isDirectory())
        continue;
    if(!showHidden && file.isHidden())
        continue;
    files.add(file);
}
Collections.sort(files);
return files;
}

public String[] names(ArrayList<File> files) {
String[] names = new String[files.size()];
int i = 0;
for(File file: files) {
    names[i] = file.getName();
    i++;
}
return names;
}
}

我将 2 个相关的 xml 文件放在我放在 res 文件夹中的 layout 文件夹中,该文件夹位于 AndroidSource 文件夹中。 我还下载了一些扩展程序,看看他们是如何做到的,它们在 android 源文件夹中都有一个名为 yymanifest.xml 的文件,由 gamemaker 生成,这个文件永远不会在我的扩展项目中创建,我试过保存,导出扩展并重新导入,但文件永远不会存在,而且它不是您可以自己制作的文件,游戏制作者在制作扩展时必须制作它,但是我怎样才能让它这样做???

任何想法或帮助将不胜感激

【问题讨论】:

  • 您是否尝试过在编译前清除缓存。 double 也可以取十进制值吗?

标签: android native game-maker


【解决方案1】:

一切似乎都很好,您需要在清单文件中提及您的文件夹。

【讨论】:

  • 好的,谢谢!我忽略了这样做,我会尝试一下
  • 好的,我已经为此工作了好几天,仍然是同样的错误,:无法在扩展类上找到方法:null。我通过使用java知道当你引用一个未初始化的变量时会发生空异常,但据我所知,一切都已初始化,我已经更新了我的java文件几次,所以我将编辑我原来的帖子问题新文件和我尝试过的其他东西
猜你喜欢
  • 2022-08-23
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2022-11-27
  • 2014-08-11
相关资源
最近更新 更多