Textdatei in ListView einlesen Tutorial gesucht!?

Schlucki6666

Mitglied
Hallo;

Ich habe versucht in den letzten Tagen selber das Problem zu lösen aber ich komme leider nicht auf den Fehler bzw. zur Lösung des Problems.

Also ich versuche eine Textdatei in eine ListView (mit SubItems) einzulesen. Mit einem TextView/EditView funktioniert es, aber beim ListView, stehe ich leider komplett auf dem Schlauch!
Beim Einlesen eines "normalen" Strings ("Apfel", "Birne", .....) auch mit Image, habe ich keine Probleme nur eben bei der Datei:
Öffnen der Datei - Auslesen der Datei - Übergeben an die ListView - und dort dann Anzeigen. So sollte es sein. Aber ........ leider nicht bei mir 😳

Hat jemand zufällig einen Link/Tutorial oder Info wie ich auf meinen Fehler komme?
Angefügt habe ich euch meine letzte nicht funktionierenden Code, damit ihr eine Ahnung habt, wie ich rummurkse

Java:
public static void main(String [] args){	
		
		try{
			File sdcard = Environment.getExternalStorageDirectory();
			File myFile = new File(sdcard,"Test.txt");
			FileReader fread = new FileReader(myFile); //öffntet die gewünschte txt Datei
			BufferedReader in = new BufferedReader(fread); // txt wird geladen
			
			for(int i = 0;(line = in.readLine())!=null; i++){ 				
				array[i] = line; // array[i] wird mit line(der aktuellen Zeile) belegt			
				
			}
		}
		catch(IOException e){
			//System.out.println("IO-Fehler!");
		}
		
		//System.out.println(array[0]); 						
	}
	
ListView list;

  String[] web= {"TesT"}; //HIER SOLLTE, SO DENKE ICH, DER INHALT DER DATEI ÜBERGEBEN WERDEN ODER - WENN JA WIE?
 
  Integer[] imageId = {
		  R.drawable.baustelle
  };
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Button button = (Button) findViewById(R.id.button1);
	button.setOnClickListener(this);
    
	
  }
  
 
  	public void onClick(View v){
    	if(v.getId()==R.id.button1)
    		{
    		try{
    		File sdcard = Environment.getExternalStorageDirectory();
			File myFile = new File(sdcard,"Test.txt");
			FileInputStream fIn = new FileInputStream(myFile);
			BufferedReader myReader = new BufferedReader(
					new InputStreamReader(fIn));
						String aDataRow = "";
						String aBuffer = "";
			
			while ((aDataRow = myReader.readLine()) != null) {
				aBuffer += aDataRow + "\n";
			}
			
					CustomList adapter = new
    		        CustomList(MainActivity.this, web, imageId);
    				
    				TextView txtTitle = (TextView)findViewById(R.id.textView1);
    				txtTitle.setText("Soweit so gut!");
    				
    				list=(ListView)findViewById(R.id.list);
    		        list.setAdapter(adapter);
    		        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    		        		               
    		        	
    		        	@Override
    		                public void onItemClick(AdapterView<?> parent, View view,
    		                                        int position, long id) {
    		                    Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();
    		                }
    		            });
			//list.setText(aBuffer);
			myReader.close();
			Toast.makeText(getBaseContext(),
					"Datei gelesen",
					Toast.LENGTH_SHORT).show();
			
    		}
    		catch (Exception e) {
    			Toast.makeText(getBaseContext(), e.getMessage(),
    					Toast.LENGTH_SHORT).show();
    		
    				
			
    				
    		}
    		}

}}

Steinigt mich bitte nicht gleich, wenn der Code etwas verwirrend ist oder umständlich. 😛feif:
Ich habe für meine App wirklich schon viele Fehler beseitigen können dank dem Forum, aber hier blicke ich gerade echt nicht durch und finde auch keine Hilfe die mir weiterhilft??
Aber vermutlich habe ich die Lösung schon 100mal gelesen und nicht bemerkt.

Danke vorab für eure Hilfe und vor allem für euer Verständnis!!!

lg
Schlucki
 
Ohne den Code der "CustomList" - der besser CustomListAdapter heissen sollte - wird das schwierig. Ich denke mal, das da irgendwo das Problem liegt.

Darüber hinaus: Verrate mir bitte, warum deine Klasse eine Main-Methode enthält! Dieses Konzept gibt es in Android nicht und ist schlicht falsch. Es gibt zwar Frameworks für (Dekptop?) Anwendungen, die man 1:1 so auf Android umziehen kann, aber dann gibt es da wahrscheinlich eine Wrapper-Activity, die das statisch aufruft und weiss, wie man mit den Calls umgeht. Für deinen Code scheint das aber nicht zu gelten...
 
@dezim:

Danke für deine Antwort. Ich muss mich aber auch entschuldigen, da im Code fragmente enthalten sind, die ich vergessen habe zu löschen 😳
Ich bin jetzt leider auswärts und kann daher nicht den richten Code einfügen bzw. ergänzen. Wird ehestmöglich von mir nachgereicht.

Schlucki
 
Hier nun der Code mit dem ich versuche eine txt-Datei in eine ListView einzulesen!


Hier ist meine MainActivity:

Java:
public class MainActivity extends Activity {{
	
		try {
			
			File sdcard = Environment.getExternalStorageDirectory();
			File myFile = new File(sdcard,"Test.txt");
			
			FileInputStream fIn = new FileInputStream(myFile);
			BufferedReader myReader = new BufferedReader(
					new InputStreamReader(fIn));
	
			String aDataRow = "";
			String aBuffer = "";
			
			while ((aDataRow = myReader.readLine()) != null) {
				aBuffer += aDataRow + "\n";
			}}
			catch (Exception e) {
				Toast.makeText(getBaseContext(), e.getMessage(),
						Toast.LENGTH_SHORT).show();
			
		//myReader.close();

	}}
	
		
		ListView list;
  String[] web = {   // ich denke hier sollte der Inhalt der Datei übergeben werden!!!
    //"Google Plus",
     // "Twitter",
     // "Windows",
     // "Bing",
     // "Itunes",
     // "Wordpress",
     // "Drupal"
  } ;
  Integer[] imageId = {
      R.drawable.baustelle,
      R.drawable.baustelle,
      R.drawable.baustelle,
      R.drawable.baustelle,
      R.drawable.baustelle,
      R.drawable.baustelle,
      R.drawable.baustelle

  };
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    CustomList adapter = new
        CustomList(MainActivity.this, web, imageId);
    list=(ListView)findViewById(R.id.list);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();
                }
            });
  }
}

Also das Dateiauslesen funktioniert in eine TextView und eine ListView kann ich mit den Strings in "web" befüllen. Aber wie ich nun den Dateiinhalt (Zeilen der Datei) in die ListView bekomme? Übersteigt gerade massiv meinen Horizont!


Hier ist meine CustomList.java:

Java:
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] web;
private final Integer[] imageId;
public CustomList(Activity context,
String[] web, Integer[] imageId) {
super(context, R.layout.list_single, web);
this.context = context;
this.web = web;
this.imageId = imageId;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(web[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}

Sorry, wenn ich mich eventuell etwas blöd anstelle....... bin eben Anfänger ;(

Danke Schlucki
 

Zurück
Oben