wenn folgende Meldung kommt (String concatenation '+' in loop; ... usually it is preferable to replace it with explicit calls to StringBuilder.append() or StringBuffer.append()
Dann kann man das vorhandene Coding relativ einfach umbauen.
Hier ein Beispiel:
Coding mit Warnung:
privateString getRestOfSplit(String text){StringTokenizer tokens = newStringTokenizer(text, " ");
tokens.nextToken();// this will contain passwordString second = "";// loop through tokenswhile(tokens.hasMoreTokens()){
second = second + " " + tokens.nextToken();}//Log.d(TAG, "Text rest with trim is: " + second);return second.replaceFirst("^ *", "");}
private String getRestOfSplit(String text) { StringTokenizer tokens = new StringTokenizer(text, " "); tokens.nextToken();// this will contain password String second = "";
// loop through tokens while (tokens.hasMoreTokens()) { second = second + " " + tokens.nextToken(); }
//Log.d(TAG, "Text rest with trim is: " + second); return second.replaceFirst("^ *", ""); }
Neues Coding:
privateString getRestOfSplit(String text){//example input for text: "password do some things"StringTokenizer tokens = newStringTokenizer(text, " ");
tokens.nextToken();// this will contain "password", we don't need it so we don't assign it to a variableStringBuilder second = newStringBuilder();//changed to StringBuilder; here we want "do some things"// loop through tokenswhile(tokens.hasMoreTokens()){// second = second + " " + tokens.nextToken(); old coding
second.append(" ").append(tokens.nextToken());//new coding}//Log.d(TAG, "Text rest with trim is: " + second);//return second.replaceFirst("^ *", ""); old codingreturn second.toString().replaceFirst("^ *", "");//new coding replace first blank with nothing (eliminate the space)}
private String getRestOfSplit(String text) { //example input for text: "password do some things" StringTokenizer tokens = new StringTokenizer(text, " "); tokens.nextToken(); // this will contain "password", we don't need it so we don't assign it to a variable StringBuilder second = new StringBuilder(); //changed to StringBuilder; here we want "do some things"
// loop through tokens while (tokens.hasMoreTokens()) { // second = second + " " + tokens.nextToken(); old coding second.append(" ").append(tokens.nextToken()); //new coding }
//Log.d(TAG, "Text rest with trim is: " + second); //return second.replaceFirst("^ *", ""); old coding return second.toString().replaceFirst("^ *", ""); //new coding replace first blank with nothing (eliminate the space) }
Um folgende Android Studio Meldung "This AsyncTask class should be static or leaks might occur" zu vermeiden, kann man entsprechend in einen Async Task über eine Hilfsklasse sämtliche Parameter übergeben.
Hier ein Beispiel (wobei location bereits ermittelt wurde; siehe diverse Android Foren/Hilfen auf Google). Mittels result wird das Ergebnis von der Methode doInBackground in die Methode postExecute vom AsyncTask übergeben
public static class GetLocationDownloadTask extends AsyncTask<MyTaskParams, Void, MyTaskParams> {
@Override protected MyTaskParams doInBackground(MyTaskParams... params) { String urlString = params[0].urlString; //fetch parameter; other parameter for example params[0].context we do not need in doInBackground method StringBuilder sb = new StringBuilder(); URL url; HttpURLConnection urlConnection; try { url = new URL(urlString); urlConnection = (HttpURLConnection) url.openConnection(); InputStream is = urlConnection.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(is);
//Send to your app broadcast receiver for new address Intent filterRes = new Intent(); filterRes.setAction("YOURACTION"); filterRes.putExtra("address", address); context.sendBroadcast(filterRes); }