Ich möchte Zeichenfolge aus einer anderen Zeichenfolge in meiner MainActivity anzeigen, aber die Zeichenfolge wird in Konsole gedruckt. Hier ist mein Code:Zugriff auf Zeichenfolge aus Klasse
public class MainActivity extends AppCompatActivity {
Button start;
public TextView showText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showText= (TextView)findViewById(R.id.textView);
start = (Button)findViewById(R.id.button);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RetrieveFeedTask click1 = new RetrieveFeedTask();
click1.execute();
showText.setText(click1.getString());
}
});
}
}
Und die Klasse:
class RetrieveFeedTask extends AsyncTask<Void, Void, String> {
static final String API_URL = "http://numbersapi.com/random/trivia?json";
private Exception exception;
public String finalString;
protected void onPreExecute() { }
protected String doInBackground(Void... urls) {
try {
URL url = new URL(API_URL);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
while ((finalString = bufferedReader.readLine()) != null) {
stringBuilder.append(finalString).append("\n");
}
bufferedReader.close();
return stringBuilder.toString();
}
finally{
urlConnection.disconnect();
}
}
catch(Exception e) {
Log.e("ERROR", e.getMessage(), e);
return null;
}
}
protected void onPostExecute(String response) {
if(response == null) {
response = "THERE WAS AN ERROR";
}
try {
JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
finalString = object.getString("text");
Log.i("Here",finalString);
} catch (JSONException e) {
}
}
public String getString() {
return this.finalString;
}
}
Sie nie sind die Aufgabe ausgeführt wird. Ich empfehle Ihnen, mehr Tutorials zu lesen. – njzk2
Die asynctask wird in einem anderen Thread ausgeführt. Derzeit legen Sie die Zeichenfolge fest, bevor die Aufgabe abgeschlossen ist. Setzen Sie den String in der 'onPostExecute' Methode. –
Ich denke, wenn Sie auf die Schaltfläche klicken, um die Aufgabe zu starten, hat die Aufgabe keine Zeit, "finalString" festzulegen, bevor Sie es in der "TextView" festlegen – Sunshinator