Hallo,
ich tätige in einem zweiten Thread eine HTTPURLConnection. Der URL
Request steht danach in updateText. Da HTTP Aufgaben ja nur in
Hintergrund ausgeführt werden dürfen liegt dort auch der Request in
einem String.
Diesen String benötige ich nun im MainThread, jedoch in einem String.
Wenn ich den Request in ein TextView mit setText und goString schreibe
zeigt er mir den Request auch im Layout vom MainThread an. Wenn ich
diesen aber in einem String weiterverarbeiten will bleibt der String
leer.
Wie bekomme ich nun den Request des zweiten Threads zurück in den
MainThread?
1 | public void websiteread(final String weburl) {
|
2 | new Thread(new Runnable() {
|
3 |
|
4 | public void run() {
|
5 |
|
6 | InputStream is = null;
|
7 | URL url = null;
|
8 | BufferedReader reader = null;
|
9 | StringBuilder stringBuilder;
|
10 | try {
|
11 | url = new URL(weburl);
|
12 | HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
13 | conn.setReadTimeout(10000 /* milliseconds */);
|
14 | conn.setConnectTimeout(15000 /* milliseconds */);
|
15 | conn.setRequestMethod("GET");
|
16 | conn.setDoInput(true);
|
17 | // Starts the query
|
18 | conn.connect();
|
19 | int response = conn.getResponseCode();
|
20 | Log.d("DEBUG_TAG", "The response is: " + response);
|
21 | is = conn.getInputStream();
|
22 | reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
23 | stringBuilder = new StringBuilder();
|
24 | String line = null;
|
25 | while ((line = reader.readLine()) != null) {
|
26 | stringBuilder.append(line + "\n");
|
27 | }
|
28 | reader.close();
|
29 | final String updateText = stringBuilder.toString();
|
30 |
|
31 | runOnUiThread(new Runnable() {
|
32 | @Override
|
33 | public void run() {
|
34 | testtest = updateText;
|
35 | }
|
36 | });
|
37 |
|
38 | if (updateText != null && !updateText.isEmpty()) {
|
39 | Handler uiCallback = new Handler(Looper.getMainLooper());
|
40 | uiCallback.post(new Runnable() {
|
41 | @Override
|
42 | public void run() {
|
43 |
|
44 | Intent suchergebnisse = new Intent(getApplicationContext(), ergebnisse.class);
|
45 | suchergebnisse.putExtra("ergebnisse", updateText);
|
46 | startActivity(suchergebnisse);
|
47 | finish();
|
48 |
|
49 | }
|
50 | });
|
51 | }
|
52 | } catch (Exception e) {
|
53 | }
|
54 | }
|
55 | }).start();
|
56 | }
|
Wenn ich das so mache, also den String mittels Intent putExtra übergebe
und dann die neue Activity starte habe ich den String in der neuen
Activity.
Dann öffnet sich jedoch eine neue Activity und die alte schließt sich.
SO geht es zwar, sieht aber in der App blöd aus wenn ich die Fenster
immer öffnen und schließen.
Wie kann ich das machen das ich den String in der Haupt Activity wieder
weiter verarbeiten kann?
Wenn ich den Intent Teil entferne, also so
1 | public void websiteread(final String weburl) {
|
2 | new Thread(new Runnable() {
|
3 |
|
4 | public void run() {
|
5 |
|
6 | InputStream is = null;
|
7 | URL url = null;
|
8 | BufferedReader reader = null;
|
9 | StringBuilder stringBuilder;
|
10 | try {
|
11 | url = new URL(weburl);
|
12 | HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
13 | conn.setReadTimeout(10000 /* milliseconds */);
|
14 | conn.setConnectTimeout(15000 /* milliseconds */);
|
15 | conn.setRequestMethod("GET");
|
16 | conn.setDoInput(true);
|
17 | // Starts the query
|
18 | conn.connect();
|
19 | int response = conn.getResponseCode();
|
20 | Log.d("DEBUG_TAG", "The response is: " + response);
|
21 | is = conn.getInputStream();
|
22 | reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
23 | stringBuilder = new StringBuilder();
|
24 | String line = null;
|
25 | while ((line = reader.readLine()) != null) {
|
26 | stringBuilder.append(line + "\n");
|
27 | }
|
28 | reader.close();
|
29 | final String updateText = stringBuilder.toString();
|
30 |
|
31 | runOnUiThread(new Runnable() {
|
32 | @Override
|
33 | public void run() {
|
34 | testtest = updateText;
|
35 | }
|
36 | });
|
37 |
|
38 | if (updateText != null && !updateText.isEmpty()) {
|
39 | websiterequest.setText(updateText).toString();
|
40 | }
|
41 | });
|
42 | }
|
43 | } catch (Exception e) {
|
44 | }
|
45 | }
|
46 | }).start();
|
47 | }
|
(websiterequest ist ein TextView) dann setzt er den Request in den
websiterequest und gibt mir diesen in der Main Activity aus. Das jedoch
will ich nicht. Ich will den Request ja weiter verarbeiten und dann
eventuell ausgeben, Spliten wie auch immer.
Versuche ich als anstatt
1 | websiterequest.setText(updateText).toString();
|
das ganze in einen String zu schreiben
1 | websiterequestString = updateText;
|
2 | Log.d("Teststring: ", websiterequestString);
|
Dann habe ich zwar im Log den String, also wird der String auch gefüllt,
jedoch kann ich diesen in der MainClass der App nicht nutzen, also dort
ist der String weiterhin leer.
Ich hoffe ihr versteht wie ich das meine und könnt mir weiter helfen.
Danke schon einmal.