Hallo Leute,
zuerst muss ich betonen, dass ich Java\JavaFx anfänger bin, also bitte verurteilt mich nicht.
Ich habe eine JavaFx anwendung, die so auch super Funktioniert. Diese möchte ich jetzt auf meinem Handy zum Laufen bringen.
Hier erstmal die Fx variante
Diesen hab ich nun versucht mittels Android Studio auf ein Mobile device zu übertragen.
Im endeffekt scheitert es an der Foreach - Schleife, welche immer in einem false endet, ich kann mir aber nicht erklären warum.
Hier mein Android Studio Code
Wie schon gesagt, ich bin Anfänger und vermute, dass es etwas mit dem Android lifecycle zu tun hat. Wenn es damit zu tun hat, versteh ich die Umsetzung nicht. Die Methode, die das Textfile einliest funktioniert ja auch einfandfrei. Warum dann nicht die, welche alles verarbeitet?
zuerst muss ich betonen, dass ich Java\JavaFx anfänger bin, also bitte verurteilt mich nicht.
Ich habe eine JavaFx anwendung, die so auch super Funktioniert. Diese möchte ich jetzt auf meinem Handy zum Laufen bringen.
Hier erstmal die Fx variante
Java:
public class Main extends Application {
private double xOffset = 0;
private double yOffset = 0;
@FXML
TextField input;
@FXML
TextArea output;
@FXML
Text time;
String word;
List<String> wordList = new ArrayList<String>();
List<String> foundWords = new ArrayList<>();
String list;
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("Ui.fxml"));// Mit Scenebuilder verknüpfen
Scene scene = new Scene(root, 400, 500);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.initStyle(StageStyle.TRANSPARENT);
root.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
xOffset = event.getSceneX();
yOffset = event.getSceneY();
}
});
// move around here
root.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
primaryStage.setX(event.getScreenX() - xOffset);
primaryStage.setY(event.getScreenY() - yOffset);
}
});
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
// Workprogress
public void progress() {
MediaPlayer musicplayer;
Media mp3MusicFile = new Media(getClass().getResource("dontdrop.mp3").toExternalForm());
musicplayer = new MediaPlayer(mp3MusicFile);
musicplayer.setAutoPlay(true);
musicplayer.setVolume(0.2); // from 0 to 1
Instant starts = Instant.now();
word = input.getText().toUpperCase();
char[] wordChars = word.toCharArray();
try {
InputStream is = getClass().getResourceAsStream("wortliste.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader read = new BufferedReader(isr);
Arrays.asList(wordList);
while ((list = read.readLine()) != null) {
wordList.add(list);
}
read.close();
} catch (Exception e) {
e.getMessage();
}
System.out.println("text eingelesen");
for (String w : wordList) {
for (char letter : wordChars) {
if (word.indexOf(letter) > 0 && foundWords.indexOf(w) < 0 && w.length() <= wordChars.length
&& notTooManyLetters(w.toCharArray(), wordChars) && sameLetters(w.toCharArray(), wordChars)) {
foundWords.add(w);
}
}
}
System.out.println(foundWords.toString());
output.setText(foundWords.toString());
Instant ends = Instant.now();
time.setText(Duration.between(starts, ends).toMillis() / 1000d + " Secs");
};
// Work Button
public void handelabc(ActionEvent event) {
progress();
}
// Exit Button
public void handelquit(ActionEvent event){
Platform.exit();
}
// New Window on Button
public void handleInfo(ActionEvent event) {
try {
Parent root = FXMLLoader.load(getClass().getResource("Info.fxml"));
Stage stage = new Stage();
stage.setScene(new Scene(root, 300, 300));
stage.setTitle("INFO ©Marcus Ferl");
stage.show();
MediaPlayer musicplayer;
{
Media mp3MusicFile = new Media(getClass().getResource("sonic.mp3").toExternalForm());
musicplayer = new MediaPlayer(mp3MusicFile);
musicplayer.setAutoPlay(true);
musicplayer.setVolume(0.2); // from 0 to 1
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
musicplayer.stop();
}
});
}
} catch (IOException e) {
e.getMessage();
}
}
public static int getNumValue(char[] string, char val) {
int count = 0;
for (char c : string) {
if (c == val) {
count++;
}
}
return count;
}
public static boolean notTooManyLetters(char[] word, char[] wordChars) {
for (char letter : wordChars) {
if (getNumValue(word, letter) > getNumValue(wordChars, letter)) {
return false;
}
}
return true;
}
public static boolean sameLetters(char[] w, char[] wordChars) {
for (char letter : w) {
if (new String(wordChars).indexOf(letter) < 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
launch(args);
}
}
Diesen hab ich nun versucht mittels Android Studio auf ein Mobile device zu übertragen.
Im endeffekt scheitert es an der Foreach - Schleife, welche immer in einem false endet, ich kann mir aber nicht erklären warum.
Hier mein Android Studio Code
Java:
public class MainActivity extends AppCompatActivity {
String word;
String list;
char[] wordChars;
List<String> wordList = new ArrayList<String>();
EditText input;
TextView output;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = (EditText) findViewById(R.id.input);
output = (TextView) findViewById(R.id.output);
}
/*
Read Textfile
*/
public void readTextfile() {
BufferedReader read = null;
try {
read = new BufferedReader(
new InputStreamReader(getAssets().open("test.txt")));
Arrays.asList(wordList);
while ((list = read.readLine()) != null) {
wordList.add(list);
}
read.close();
} catch (Exception e) {
e.getMessage();
}
Log.i("ListRead", "Done"); }
public static int getNumValue(char[] string, char val) {
int count = 0;
for (char c : string) {
if (c == val) {
count++;
}
}
return count;
}
public static boolean notTooManyLetters(char[] word, char[] wordChars) {
for (char letter : wordChars) {
if (getNumValue(word, letter) > getNumValue(wordChars, letter)) {
return false;
}
}
return true;
}
public static boolean sameLetters(char[] w, char[] wordChars) {
for (char letter : w) {
if (new String(wordChars).indexOf(letter) < 0) {
return false;
}
}
return true;
}
// Create Result
public void compare() {
List<String> foundWords = new ArrayList<String>();
word = input.getText().toString().toUpperCase();
wordChars = word.toCharArray();
for (String w : wordList) {
for (char letter : wordChars) {
if (word.indexOf(letter) > 0 && foundWords.indexOf(w) < 0 && w.length() <= wordChars.length
&& notTooManyLetters(w.toCharArray(), wordChars) && sameLetters(w.toCharArray(), wordChars)) {
foundWords.add(w);
} else {
if (foundWords.size() <= 0) {
Log.i("CheckList", "Empty List!");
}
}
}
}
output.setText(foundWords.toString());
}
public void onKlickAbc(View view) {
readTextfile();
compare();
}}
Wie schon gesagt, ich bin Anfänger und vermute, dass es etwas mit dem Android lifecycle zu tun hat. Wenn es damit zu tun hat, versteh ich die Umsetzung nicht. Die Methode, die das Textfile einliest funktioniert ja auch einfandfrei. Warum dann nicht die, welche alles verarbeitet?