1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. CMZoller, 31.05.2012 #1
    CMZoller

    CMZoller Threadstarter Junior Mitglied

    Hallo,

    ich bin ziemlich neu in der Android-Entwicklung und habe mich bereits etwas eingearbeitet.

    Soweit klappt alles, doch jetzt stolper ich über ein Problem:
    Undzwar wird in Zeile eine NullPointerException und ich kann mir nicht erklären wieso.

    Alles klappt, bis ich ein Item aus der Liste auswähle und die Daten an die Activity übergeben will.
    Code:
    package com.android.npack;
    
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.app.Dialog;
    import android.content.Context;
    import android.content.Intent;
    import android.net.http.AndroidHttpClient;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.TextView;
    import com.android.npack.HttpAccess;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import android.app.ListActivity;
    import android.view.View;
    import android.view.animation.AnimationUtils;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    
    
    
    public class npackActivity extends ListActivity{
    	private ArrayList<HashMap<String, String>> myListContent = 
    			new ArrayList<HashMap<String, String>>();
    	private SimpleAdapter adapter;
    	private ListView lv;
    	private int i;
    	static String[] newsId;
    	 static ArrayList<String> newsData = new ArrayList<String>();
    	 static ArrayList<String> newsData2 = new ArrayList<String>();
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    //Working
            //String newsIds = HttpAccess.loadData("http://api.example.com/?ns=nid");
           // if(newsIds == "noconnection") {
            //	TextView nocContent = (TextView) findViewById(R.id.pleasewait);
    	     //    nocContent.setText("Verbindungsabbruch");
            	
            	
            //} else {
            //newsId = newsIds.split(" ");
            
            LoadHeadlinesTask task = new LoadHeadlinesTask();
    		task.execute();
           // }
    		
    		adapter = new SimpleAdapter(
            		this,
            		myListContent,
            		R.layout.two_line_list_item,
            		new String[] {"Headline", "Subheadline"},
            		new int[] {R.id.text1, R.id.text2});
        
            
            
          
        }
        
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.home_menu, menu);
            return super.onCreateOptionsMenu(menu);
        }
        
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_impressum:        
            final Intent info_intent = new Intent(this, ImpressumActivity.class);         
            startActivity(info_intent);      
            break;
        case R.id.menu_feedback:        
            final Intent fb_intent = new Intent(this, FeedbackActivity.class);         
            startActivity(fb_intent);      
            break;
            default:          
        }
        return super.onOptionsItemSelected(item);
    }
        private class LoadHeadlinesTask extends AsyncTask<String, Void, String> {
    		@Override
    		protected String doInBackground(String... newsId) {
    			String newsIds = HttpAccess.loadData("http://api.example.com/?ns=nid");
    			if(newsIds == "noconnection") {
    				TextView nocContent = (TextView) findViewById(R.id.pleasewait);
    			    nocContent.setText("Verbindungsabbruch");
    			} else {
    			
    	        newsId = newsIds.split(" ");
    			//Load headlines an return them as array
    			for(i = 0; i <= 9; i++){
    	        	String newsInfos = HttpAccess.loadData("http://api.example.com/?ns=news&id="+newsId[i]);
    	        	JSONArray jsonArray;
    				try {
    					jsonArray = new JSONArray(newsInfos);
    					JSONObject jsonObject = jsonArray.getJSONObject(0);
    					String newsName = jsonObject.getString("name");
    					String newsSub = jsonObject.getString("untertitel");
    		 			
    		 			 newsData.add(i,newsName); 
    		 			
    		 			 newsData2.add(i,newsSub); 
    		 			 
    		 			 
    				} catch (JSONException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    			//return headlines
    			
    			}//End else
    			return "...";
    		}
    
    		@Override
    		protected void onPostExecute(String result) {
    			//Remove Please wait text
    			 View row = findViewById(R.id.pleasewait);
    			   
    			        row.startAnimation(AnimationUtils.loadAnimation(npackActivity.this, android.R.anim.fade_out));
    			        row.setVisibility(View.INVISIBLE);
    			        
    			        View row2 = findViewById(R.id.pleasewait2);
    					   
    			        row2.startAnimation(AnimationUtils.loadAnimation(npackActivity.this, android.R.anim.fade_out));
    			        row2.setVisibility(View.INVISIBLE);
    			   
    			//Set Data
    			/** Fill list with data*/
    		       
    	        for(i = 0; i <= 9; i++){
    	        	HashMap<String, String> item = new HashMap<String, String>();
    	        	String newsName = newsData.get(i);
    	        	String newsSub = newsData2.get(i);
    	        	item.put("Headline", newsName);
    	        	item.put("Subheadline", newsSub);
    	        	myListContent.add(item);
    	        	adapter.notifyDataSetChanged();
    	        }
    			
    			//Update
    	        adapter.notifyDataSetChanged();
    	        
    	        
    	        //Load intents after tapping on links
    	        
    	        
    	        setListAdapter(adapter);
    	        
    	        
    	        ListView lv = getListView();
    	      
    	        lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener(){
    	        	public void onItemClick(AdapterView<?> parent, View view, int position, long id){
    	        		HashMap<String, String> item;
    	        		item = myListContent.get(position);
    	        		 
    	        		Bundle b = new Bundle();
    	                String newId = newsId[position];
    	        		b.putString("nid", newId);
    	        		Intent newsActivity = new Intent(npackActivity.this, ReadNewsActivity.class);
    	        		newsActivity.putExtras(b);
    	        		
    	        		npackActivity.this.startActivity(newsActivity);
    	        		
    	        		myListContent.set(position, item);
    	        		adapter.notifyDataSetChanged();
    	        	}
    	        }); 	
    	        
    	        //Text2
    	        
    		}
    	}
    
        
    }
    
    Es handelt es sich um folgende Zeile:

    Code:
    String newId = newsId[position];
    
    Die App habe ich als Anhang hinzugefügt.
     

    Anhänge:

    • npack.apk
      Dateigröße:
      91,5 KB
      Aufrufe:
      55
    Zuletzt bearbeitet: 31.05.2012
  2. maniac103, 31.05.2012 #2
    maniac103

    maniac103 Android-Lexikon

    Die Zuweisung zu newsIds passiert im Moment zu einer anderen Variable, als du denkst. Schau den Code nochmal genau an ;)

    BTW, warum ist newsIds static?

    Gesendet von meinem MB525 mit Tapatalk 2
     
    CMZoller gefällt das.
  3. mkl, 31.05.2012 #3
    mkl

    mkl Fortgeschrittenes Mitglied

    Mach nen try catch um die Zeile und debugge bis dahin dann bekommst meist ne eindeutige Information. Also nur

    try{
    //Zeile
    }
    catch(Exception e){
    e.printtostacktrace();
    }

    Bin grad nur n bissi eingeschränkt am Handy ;)

    Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
     
  4. maniac103, 01.06.2012 #4
    maniac103

    maniac103 Android-Lexikon

    Er weiß doch aber schon, wo es crasht. Der Grund dafür ist ja, wie oben angedeutet, relativ offensichtlich.

    Gesendet von meinem MB525 mit Tapatalk 2
     
  5. Tom299, 01.06.2012 #5
    Tom299

    Tom299 Android-Experte

    Wieso meckert Eclipse bei dir nicht? Oder seh ich was falsch?
    Code:
    String s = "xxxxxxxxx tttttttttt";
    s = s.split(" "); // das kann nicht gehen!!!
    
    Wenn du .split() benutzt, brauchst du ein String-Array. Bei dir ist newsId aber nur ein String:
    Code:
    String newsIds = HttpAccess.loadData(...)
    newsId = newsIds.split(" "); [COLOR="Red"]<-oh weh ;-)[/COLOR]
    
     
  6. CMZoller, 01.06.2012 #6
    CMZoller

    CMZoller Threadstarter Junior Mitglied

    Werde am PC mal die Variablen umbenennen.
    newsId, newsIds und newId, da kann man durcheinander kommen.

    Kleiner Hinweis: Wenn ich jetzt auskommentierte Teil entkommentiere, klappt alles aber es dauert etwas, bis das UI angezeigt wird.

    Gesendet von meinem U8160 mit der Android-Hilfe.de App
     
  7. CMZoller, 02.06.2012 #7
    CMZoller

    CMZoller Threadstarter Junior Mitglied

    So, habe mal die Variablen umbenannt und jetzt geht es...
    Bin mir zwar des Fehlers noch nicht ganz bewusst, aber das es geht dürfte fürs Erste reichen.

    Ich möchte mich für meine Dummheit entschuldigen und euch für eure Antworten danken :cool2:

    Bis demnächst ;)

    Der ursprüngliche Beitrag von 22:16 Uhr wurde um 22:18 Uhr ergänzt:

    @Tom:
    Natürlich handelte es sich dabei um zwei verschiedene (aber sehr ähnlich lautende) Variablen (s.o.)
     
  8. maniac103, 03.06.2012 #8
    maniac103

    maniac103 Android-Lexikon

    Um meinen Hinweis mal aufzulösen: Du hattest zwei Variablen namens newsIds, hast auf die lokale Variable zugewiesen und erwartet, dass du auf die Membervariable zuweist ...

    Gesendet von meinem MB525 mit Tapatalk 2
     
  9. CMZoller, 03.06.2012 #9
    CMZoller

    CMZoller Threadstarter Junior Mitglied

    Achso, ja stimmt!

    Danke, dort hatte ich bisher garnicht gesucht :banghead::banghead::banghead::banghead::banghead::banghead::banghead::banghead:

    Gesendet von meinem U8160 mit der Android-Hilfe.de App
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] Warum bekomme ich hier eine NullPointerException Android App Entwicklung 07.10.2017
[ERLEDIGT] Tipps für AsyncTask Klasse Android App Entwicklung 18.05.2017
AsyncTask ProgressDialog ändern Android App Entwicklung 21.02.2017
Notification in AsyncTask -> crash Android App Entwicklung 11.02.2017
Gängige Praxis zum Nutzen von AsyncTasks auf anderen Activities Android App Entwicklung 20.01.2017
AsyncTasks: "FTP Download" / "FTP liste Daten in Verzeichnis" Probleme Android App Entwicklung 16.01.2017
Du betrachtest das Thema "NullPointerException bei AsyncTask" im Forum "Android App Entwicklung",