2016-08-09 41 views
0

Hallo Im eine Android native Erweiterung in Gamemaker machen: Studio und wenn ich das Spiel laufen und versuchen, die Erweiterung i diesen Fehlercode in dem Läufer Befehlsfenster bekommen zu verwenden:Die Methode kann nicht auf Erweiterungsklasse finden:

Methode für Erweiterungsklasse kann nicht gefunden werden: folderLoader [double, double]

Es stürzt das Spiel nicht ab oder wirft keine anderen Fehler, es kann meine Methode in der Java-Datei einfach nicht finden. das ist, wie ich es einrichten:

bearbeiten Erweiterungspaket Eigenschaften General tab-

Name- DirectoryPicker

android tickte Checkbox

inject

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

manifest- inject to grandle (um meine styles.xml zu aktivieren) -

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

bearbeiten Erweiterungspaket Eigenschaften-android tab-

Klasse Namen- DirectoryPicker

Permissions- android.permission.WRITE_EXTERNAL_STORAGE

bearbeiten Erweiterung Dateieigenschaften Box-

Namen- DirectoryPicker.extension .gmx

Init-Funktion- set to folderLoader

copys to Android und Android yyc Boxen

bearbeiten Erweiterungsfunktionen Box-

Namen- folderLoader

externe Namen- folderLoader

Hilfe- folderLoader (Doppel FolderOnly, Doppelshowhidden nur abgehakt)

Rückgabetyp box- selected double

Schlüssel und Wert Box- Argument 0 Doppel argument1 Doppel

der anruf Code für ein linke Maus gedrückt Ereignis Objekt:

folderLoader(1.0, 0.0); 

des Asynchron-Ereignis in dem gleichen Objekt (auf gesellschaftliches Ereignis):

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

die Java-File- DirectoryPicker.java namens

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; 
} 
} 

Es gibt 2 verknüpfte XML-Dateien, die ich in den Layout-Ordner lege, den ich in den Ordner res, der sich im AndroidSource-Ordner befindet. Ich habe auch einige Erweiterungen heruntergeladen, um zu sehen, wie sie sie gemacht haben, und sie alle haben eine Datei im Android-Quellordner namens yymanifest.xml, die vom Spielehersteller generiert wird, diese Datei wird nie in meinem Erweiterungsprojekt erstellt, ich habe es versucht Speichern, Exportieren der Extension und erneutes Importieren, aber die Datei ist nie da, und es ist keine Datei, die du selbst machen kannst, der Spielmacher muss es produzieren, wenn es die Erweiterung macht, aber wie kann ich es dazu bringen ???

Irgendwelche Ideen oder Hilfe sehr

+0

haben Sie versucht, den Cache vor dem Kompilieren zu löschen. Kann auch doppelte Dezimalwerte annehmen? – user2899094

Antwort

3

Nun scheint alles in Ordnung geschätzt würde man Sie in menifest Dateiordner erwähnen müssen.

+0

ok cool und danke !! Ich versäumte es zu tun, ich werde es versuchen – Wraithious

+0

Ok, also habe ich seit Tagen daran gearbeitet, immer noch den gleichen Fehler,: Kann nicht finden, Methode für die Erweiterung Klasse: null. Ich weiß durch die Arbeit mit Java, dass null Ausnahmen auftreten, wenn Sie eine uninitialisierte Variable referenzieren, aber soweit ich sehen kann, dass alles initialisiert ist, habe ich meine Java-Datei ein paar Mal aktualisiert, so dass ich meine ursprüngliche Frage mit bearbeiten werde die neue Datei und andere Dinge, die ich ausprobiert habe – Wraithious