URL Objekt wird nicht erstellt

  • 4 Antworten
  • Letztes Antwortdatum
N

Nanika

Neues Mitglied
0
Hallo zusammen,

momentan bin ich dabei, eine App zu entwickeln, mit der ich einige Probleme habe. Ich bin absolute Anfängerin in der App-Entwicklung und hoffe, dass ihr mir helfen möchtet :)

Also, meine App soll erstmal einfach nur eine Verbindung zu einer Webseite aufbauen und ein Bild runterladen (Bild runterladen ist noch nicht mit drin, ich habe zu meinem Verständnis erstmal nur ein Beispiel übernommen). Dazu habe ich bisher das hier:

Code:
...
public class MainActivity extends Activity {
    ...
    public void connect(View view) {
        Intent intent = new Intent(this, ConnectToServer.class);    
        EditText url = (EditText) findViewById(R.id.url);
        String urlString = url.getText().toString();
        intent.putExtra(URL, urlString);
        startActivity(intent); 
    }
}
connect(View view) führt hierhin:
Code:
...
public class ConnectToServer extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        Intent intent = getIntent();
        String url = intent.getStringExtra(MainActivity.URL);
        TextView textView = new TextView(this);
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            Log.d(url, "connected");
            new DownloadContent().execute(url);
        } else {
            textView.setText("No network connection available.");
        }
    }
...
}
Die DownloadContent()-Klasse sieht so aus, da ist auch mein Problem:
Code:
package com.example.test2;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;

import android.os.AsyncTask;
import android.util.Log;

public class DownloadContent extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... urls) {
            try { 
                return getUrl(urls[0]);
            } catch (IOException e) {
                return "Cannot reach URL";
            }
    }

    private String getUrl(String urls) throws IOException {
        InputStream inputStream = null;
        int length = 500;
        try {   
            URL url = new URL(urls);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000);
            conn.setConnectTimeout(11000);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            int response = conn.getResponseCode();
            Log.d(urls, "The response is: " + response);
            inputStream = conn.getInputStream();

            String content = readInputStream(inputStream, length);
            return content;

        } finally {
            if (inputStream != null) {
                inputStream.close();
            } 
        } 
    }

    public String readInputStream(InputStream stream, int length) throws IOException, UnsupportedEncodingException {
        Reader reader = null;
        reader = new InputStreamReader(stream, "UTF-8");        
        char[] buffer = new char[length];
        reader.read(buffer);
        return new String(buffer);
    }    
}
Das ist ein Beispiel von developer.android.com, was ich gerade zu verstehen versuche. Mein Problem ist nun, dass die Ausführung nur bis zum Eintritt in den try-Block geht. Das URL-Objekt in dieser Klasse wird nicht erstellt (ich teste den Ablauf mit LogCat) und ich erkenne nicht, weshalb.

Ich hoffe, jemand mag mir helfen oder mir Tips geben. Ich bin auch dankbar für gänzlich andere Möglichkeiten als das, was ich hier bisher habe. Danke dafür :)

Grüße,
Nanika
 
Zuletzt bearbeitet:
naja.. du solltest vielleicht in dem try block nicht nur ein finally einbauen sondern auch ein catch block der dir die exceptions auffängt und irgendwo anzeigt.
Vielleicht schlägt schon new URL fehl.. vielleicht erst conn.connect
 
Hi,
danke für deine Antwort :)

Dass es an URL liegt, habe ich mit LogCat überprüft, das war schon die Stelle. Ich bin nun einen Schritt zurück gegangen und habe das Ganze neu gemacht.

Jetzt mal mit Exception:

MainActivity
Code:
....
public void send(View view){
        Intent intent = new Intent(this, ImageDownload.class);
        EditText enter = (EditText) findViewById(R.id.enter);
        String url = enter.getText().toString();
        intent.putExtra(URL, url);
        startActivity(intent);
    }
...
ImageDownload
Code:
.....
    Intent intent = getIntent();
        String urlString = intent.getStringExtra(MainActivity.URL);
        
        try {
            URL url = new URL(urlString);
        } catch (MalformedURLException e) {
            TextView error = new TextView(this);
            error.setText("Bad URL");
            e.printStackTrace();
        }
      
...
Gebe ich nun lksnddvljjspvjw ein, greift die Exception nicht. Darauf sollte die Exception doch reagieren, oder?
Wo ist der Fehler? :(
 
Ja darauf sollte das ganze reagieren.
hast du mal in den LogCat geguckt ob die Fehlermeldung drin steht?

Den Fehler wirst du nur da sehen, da dein error TextView ja nirgendswo angezeigt wird.
Du erstellst das ja hier nur aber es wird ja nirgendwo als ContentView gesetzt.
Die Activity hat überhaupt keine ContentView wenn ich das richtig sehe.
Eigentlich dürftest du nur einen leeren Bildschirm sehen.
 
Der Fehler lag wohl hier:

Code:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_download);

      [B]  if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }[/B]
        Intent intent = getIntent();
        String urlString = intent.getStringExtra(MainActivity.URL);
        Bitmap b = download(urlString);
        ImageView i = null;
        
    }
  .....
Jetzt funktioniert es :) Allerdings habe ich nicht verstanden, wo genau das Problem war.
Könnte mir jemand erklären, warum das raus muss? :)
 
Zurück
Oben Unten