Antwort vom Server

  • Antworten:7
Alexander R.
  • Forum-Beiträge: 23

07.09.2013, 19:03:16 via Website

Hallo,

habe ein Bild das ich zum Server schicken will und soweit so gut aber wie mache ich es das die Seite die nach dem "upload" aufgeht ? (zum weiter bearbeiten bzw login).

mein Code:

1class ImageGalleryTask extends AsyncTask<Void, Void, String> {
2 @SuppressWarnings("unused")
3 @Override
4 protected String doInBackground(Void... unsued) {
5 InputStream is;
6 BitmapFactory.Options bfo;
7 Bitmap bitmapOrg;
8 ByteArrayOutputStream bao ;
9
10 bfo = new BitmapFactory.Options();
11 bfo.inSampleSize = 2;
12 //bitmapOrg = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/" + customImage, bfo);
13
14 bao = new ByteArrayOutputStream();
15 bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bao);
16 byte [] ba = bao.toByteArray();
17 String ba1 = Base64.encodeBytes(ba);
18 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
19 nameValuePairs.add(new BasicNameValuePair("file",ba1));
20 nameValuePairs.add(new BasicNameValuePair("submit","Import"));
21 Log.v("log_tag", System.currentTimeMillis()+".jpg");
22 try{
23 HttpClient httpclient = new DefaultHttpClient();
24 HttpPost httppost = new
25 // Here you need to put your server file address
26 HttpPost("http://www.convey.de/0.bcu");
27 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
28 HttpResponse response = httpclient.execute(httppost);
29 HttpEntity entity = response.getEntity();
30 is = entity.getContent();
31 Log.v("log_tag", "In the try Loop" );
32 }catch(Exception e){
33 Log.v("log_tag", "Error in http connection "+e.toString());
34 }
35 return "Success";

mfg
Alexander

— geändert am 07.09.2013, 19:03:33

Antworten
impjor
  • Forum-Beiträge: 1.793

07.09.2013, 23:20:08 via App

Am einfachsten ist es wohl entweder einen Browser via Intent zu öffnen, oder das Ergebnis aus der HttpResponse auslesen und in einer Webview darstellen.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Alexander R.
  • Forum-Beiträge: 23

08.09.2013, 15:14:39 via Website

Habe nun :

1BufferedReader r = new BufferedReader(new InputStreamReader(is));
2 StringBuilder total = new StringBuilder();
3 String line;
4 while ((line = r.readLine()) != null) {
5 total.append(line);
6 }
7
8 WebView wv = (WebView)this.findViewById(R.id.webview);
9 setContentView(wv);
10 wv.getSettings().setJavaScriptEnabled(true);
11 wv.loadDataWithBaseURL(null, line, "text/html", "utf-8", null);

eingefügt unter Log.v aber das webview öffnet die Antwort nicht.. muss ich das wo anders einfügen?
Das einzige was mir aufgefallen ist das die Seite mit dem "Imageview und dem Upload" freezed..

— geändert am 08.09.2013, 15:16:29

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.09.2013, 16:45:26 via Website

Welchen Wert hat "line", wenn deine "while" Schleife abbricht?

In welcher Variablen sammelst du die anzuzeigenden Daten?
Versuch die also mal im loadData :)

Antworten
Alexander R.
  • Forum-Beiträge: 23

08.09.2013, 18:02:28 via Website

Ok, habe deinen Rat befolgt und ich glaube es klappt..^^ Danke Dir.
Habe nun aber das Problem das diese Meldung im Log kommt :
09-08 17:55:19.381: V/log_tag(16468): Error in http connection android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Was kann ich dagegen tun?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.09.2013, 18:11:00 via Website

Das Einlesen passiert dann wohl in einem Thread - in dem kannst du aber dein UI nicht manipulieren.

Eine Lösung wäre, das das ganze in einem AsyncTask zu erledigen und den hinteren Teil deines Codes im postExecute() zu erledigen.

Antworten
Alexander R.
  • Forum-Beiträge: 23

08.09.2013, 18:28:19 via Website

Mein Code sieht gerade so aus
1class ImageGalleryTask extends AsyncTask<Void, Void, String> {
2 @SuppressWarnings("unused")
3 @Override
4 protected String doInBackground(Void... unsued) {
5 InputStream is;
6 BitmapFactory.Options bfo;
7 Bitmap bitmapOrg;
8 ByteArrayOutputStream bao ;
9
10 bfo = new BitmapFactory.Options();
11 bfo.inSampleSize = 2;
12 //bitmapOrg = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/" + customImage, bfo);
13
14 bao = new ByteArrayOutputStream();
15 bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bao);
16 byte [] ba = bao.toByteArray();
17 String ba1 = Base64.encodeBytes(ba);
18 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
19 nameValuePairs.add(new BasicNameValuePair("Import",ba1));
20
21 Log.v("log_tag", System.currentTimeMillis()+".jpg");
22 try{
23 HttpClient httpclient = new DefaultHttpClient();
24 HttpPost httppost = new
25 // Here you need to put your server file address
26 HttpPost("http://www.convey.de/0.bcu");
27 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
28 HttpResponse response = httpclient.execute(httppost);
29 HttpEntity entity = response.getEntity();
30 is = entity.getContent();
31 Log.v("log_tag", "In the try Loop" );
32
33
34 InputStream in = is;
35 InputStreamReader A1 = new InputStreamReader(in);
36 StringBuilder sb=new StringBuilder();
37 BufferedReader br = new BufferedReader(A1);
38 String read = br.readLine();
39
40 while(read != null) {
41 System.out.println(read);
42 sb.append(read);
43 read =br.readLine();
44
45 }
46 WebView wv = (WebView)this.findViewById(R.id.webview);
47 setContentView(wv);
48 wv.getSettings().setJavaScriptEnabled(true);
49 wv.loadData(null, read, "text/html");
50 return sb.toString();
51 }catch(Exception e){
52 Log.v("log_tag", "Error in http connection "+e.toString());
53 }
54 return ba1;
55
56 }
57 private WebView findViewById(int webview) {
58 // TODO Auto-generated method stub
59 return null;
60 }
61 @Override
62 protected void onProgressUpdate(Void... values) {
63 Log.d("MyAsyncTask","onProgressUpdate");
64 super.onProgressUpdate(values);
65 }
66
67 @Override
68 protected void onPostExecute(String sResponse) {
69 try {
70 if (dialog.isShowing())
71 dialog.dismiss();
72 } catch (Exception e) {
73 Toast.makeText(getApplicationContext(),
74 e.getMessage(),
75 Toast.LENGTH_LONG).show();
76 Log.e(e.getClass().getName(), e.getMessage(), e);
77 }
78 }
79
80 }

Das muss dann also in onPostExecute rein? Aber wie?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.09.2013, 18:53:00 via Website

Sorry, aber was ist denn das für ein Chaos?
Das hast du alles von irgendwo her zusammenkopiert, ohne zu verstehen was du da eigentlich machst, oder?

Erst bastelst du irgendwas mit einer Grafik, die dann aber nicht weiter verwendet wird, dann liest du anscheinend eine Webseite aus, die du dann in ein Webview übertragen willst (dir ist schon klar, das ein Webview den URL auch direkt verarbeiten kann?).

Danach besorgst du ein Webview aus dem AsyncTask (wie soll das gehen?) um den dann als ContentView zu setzen?
Weil der kopierte Code nicht funktioniert, hast du dann gleich mal eine Methode "private WebView findViewById(int webview)" im AsyncTask erstellt, damit der Compiler nicht meckert?

Schau mal erst, das du deinen eigenen Code auch verstehst, dann räumst du den auf, und dann(!) können wir wieder über Korrekturen reden.

Antworten