NullPointerException bei AsyncTask

C

CMZoller

Neues Mitglied
2
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
    91,5 KB · Aufrufe: 103
Zuletzt bearbeitet:
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
 
  • Danke
Reaktionen: CMZoller
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
 
mkl schrieb:
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

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
 
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]
 
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
 
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.)
 
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
 
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
 

Ähnliche Themen

D
Antworten
17
Aufrufe
324
datNeMo
D
Y
Antworten
4
Aufrufe
1.188
swa00
swa00
R
  • RudolfHagen
Antworten
1
Aufrufe
637
koje71
koje71
Zurück
Oben Unten