2010-04-23 8 views
0

Je n'arrive pas à comprendre pourquoi mon programme affiche une exception de pointeur nul. Plz help me ... Voici le programme ...Raison du pointeur Null Exception

public class MusicListActivity extends Activity { 
List<HashMap<String, String>> songNodeDet = new ArrayList<HashMap<String,String>>(); 
HashMap<?,?>[] songNodeWeb; 
XMLRPCClient client; 
String logInSess; 
ArrayList<String> paths=new ArrayList<String>(); 
public ListAdapter adapter ; 
Object[] websongListObject; 
List<SongsList> SngList=new ArrayList<SongsList>(); 
Runnable r; 
ProgressDialog p; 
ListView lv; 
String s; 
@Override 
public void onCreate(Bundle si){ 
    super.onCreate(si); 
    setContentView(R.layout.openadiuofile); 
    lv=(ListView)findViewById(R.id.list1); 
    r=new Runnable(){ 
     public void run(){ 
      try{ 
       getSongs(); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (XMLRPCException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    };  
     Thread t=new Thread(r,"background"); 
     t.start(); 
     Log.e("***","process over"); 
} 
@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
     super.onResume(); 

} 
    private Runnable returnRes = new Runnable() { 
    @Override 
    public void run() { 
     Log.d("handler","handler"); 
      removeDialog(0); 
      p.dismiss(); 
      list(); 
     }     
     }; 
public void list() 
{  Log.d("#####","#####"); 
LayoutInflater inflater=getLayoutInflater(); 
String[] from={}; 
int[] n={}; 
adapter=new SongsAdapter(getApplicationContext(),songNodeDet,R.layout.row,from,n,inflater); 
lv.setAdapter(adapter);} 
private Handler handler = new Handler() { 
    public void handleMessage(Message msg){ 
     Log.d("*****","handler");   
     removeDialog(0); 
     p.dismiss(); 
    } 
    }; 
public void webObjectList(Object[] imgListObj,String logInSess) throws XMLRPCException{ 
    songNodeWeb = new HashMap<?,?>[imgListObj.length]; 
    if(imgListObj!=null){ 
     Log.e("completed","completed"); 
     for(int i=0;i<imgListObj.length;i++){ //imgListObj.length 
     songNodeWeb[i]=(HashMap<?,?>)imgListObj[i]; 
     String nodeid=(String) songNodeWeb[i].get("nid"); 
     break; 
     Log.e("img",i+"completed"); 
     HashMap<String,String> nData=new HashMap<String,String>(); 
     nData.put("nid",nodeid);   
     Object nodeget=client.call("node.get",logInSess,nodeid); 
     HashMap<?,?> imgNode=(HashMap<?,?>)nodeget; 
     String titleName=(String) imgNode.get("titles"); 
     String movieName=(String) imgNode.get("album"); 
     String singerName=(String) imgNode.get("artist"); 
     nData.put("titles", titleName); 
     nData.put("album", movieName); 
     nData.put("artist", singerName); 
     Object[] imgObject=(Object[])imgNode.get("field_image"); 
     HashMap<?,?>[] imgDetails=new HashMap<?,?>[imgObject.length]; 
     imgDetails[0]=(HashMap<?, ?>)imgObject[0]; 
     String path=(String) imgDetails[0].get("filepath"); 
     if(path.contains(" ")){ 
      path=path.replace(" ", "%20"); 
     } 
     String imgPath="http://www.gorinka.com/"+path; 
     paths.add(imgPath); 
     nData.put("path", imgPath); 
     Log.e("my path",path); 
     String mime=(String)imgDetails[0].get("filemime"); 
     nData.put("mime", mime); 
     SongsList songs=new SongsList(titleName,movieName,singerName,imgPath,imgPath); 
     SngList.add(i,songs); 
     songNodeDet.add(i,nData); 
    } 
    Log.e("paths values",paths.toString());  
// return imgNodeDet; 
    handler.sendEmptyMessage(0); 
} 
    } 
    public void getSongs() throws MalformedURLException, XMLRPCException 
{ 
    String ur="http://www.gorinka.com/?q=services/xmlrpc"; 
    URL u=new URL(ur); 
    client = new XMLRPCClient(u);  
    //Connecting to the website 
    HashMap<?, ?> siteConn =(HashMap<?, ?>) client.call("system.connect"); 
    // Getting initial sessio id 
    String initSess=(String)siteConn.get("sessid"); 
    //Login to the site using session id   
    HashMap<?, ?> logInConn =(HashMap<?, ?>) client.call("user.login",initSess,"prakash","stellentsoft2009"); 
    //Getting Login sessid 
    logInSess=(String)logInConn.get("sessid"); 
    websongListObject =(Object[]) client.call("nodetype.get",logInSess,""); 
    webObjectList(websongListObject,logInSess); 
    Log.d("webObjectList","webObjectList"); 
    runOnUiThread(returnRes); 
} 

}

est ici l'adaptateur associé ...

public class SongsAdapter extends SimpleAdapter{ 
static List<HashMap<String,String>> songsList; 
Context context; 
LayoutInflater inflater; 
public SongsAdapter(Context context,List<HashMap<String,String>> imgListWeb,int layout,String[] from,int[] to,LayoutInflater inflater) { 
    super(context,songsList,layout,from,to); 
    this.songsList=songsList; 
    this.context=context; 
    this.inflater=inflater; 
    // TODO Auto-generated constructor stub 
} 
@Override 
public View getView(int postition,View convertView,ViewGroup parent)throws java.lang.OutOfMemoryError{ 
    try { 
    View v = ((LayoutInflater) inflater).inflate(R.layout.row,null); 
    ImageView images=(ImageView)v.findViewById(R.id.image); 
    TextView tvTitle=(TextView)v.findViewById(R.id.text1); 
    TextView tvAlbum=(TextView)v.findViewById(R.id.text2); 
    TextView tvArtist=(TextView)v.findViewById(R.id.text3); 
    HashMap<String,String> songsHash=songsList.get(postition); 
    String path=songsHash.get("path"); 
    String title=songsHash.get("title"); 
    String album=songsHash.get("album"); 
    String artist=songsHash.get("artist"); 
    String imgPath=path;  
    final ImageView imageView = (ImageView) v.findViewById(R.id.image); 
    AsyncImageLoaderv asyncImageLoader=new AsyncImageLoaderv(); 
    Bitmap cachedImage = asyncImageLoader.loadDrawable(imgPath, new AsyncImageLoaderv.ImageCallback() { 
     public void imageLoaded(Bitmap imageDrawable, String imageUrl) { 
      imageView.setImageBitmap(imageDrawable); 
     } 
     }); 
    imageView.setImageBitmap(cachedImage); 
    tvTitle.setText(title); 
    tvAlbum.setText(album); 
    tvArtist.setText(artist); 
    return v; 
    } 
    catch(Exception e){ 
     Log.e("error",e.toString()); 
    } 
    return null; 
} 
public static Bitmap loadImageFromUrl(String url) { 
    InputStream inputStream;Bitmap b; 
try { 
    inputStream = (InputStream) new URL(url).getContent(); 
    BitmapFactory.Options bpo= new BitmapFactory.Options(); 
    bpo.inSampleSize=2; 
    b=BitmapFactory.decodeStream(inputStream, null,bpo); 
    return b; 
} catch (IOException e) { 
     throw new RuntimeException(e); 
    } 
} 

}

Voici ce que logcat montre. ..

04-23 16:02:02.211: ERROR/completed(1450): completed 
04-23 16:02:02.211: ERROR/paths values(1450): [] 
04-23 16:02:02.211: DEBUG/*****(1450): handler 
04-23 16:02:02.211: DEBUG/AndroidRuntime(1450): Shutting down VM 
04-23 16:02:02.211: WARN/dalvikvm(1450): threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 
04-23 16:02:02.222: ERROR/AndroidRuntime(1450): Uncaught handler: thread main exiting due to uncaught exception 
04-23 16:02:02.241: DEBUG/webObjectList(1450): webObjectList 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450): java.lang.NullPointerException 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at com.stellent.gorinka.MusicListActivity$2.handleMessage(MusicListActivity.java:81) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at android.os.Looper.loop(Looper.java:123) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
04-23 16:02:02.252: ERROR/AndroidRuntime(1450):  at dalvik.system.NativeStart.main(Native Method) 

J'ai a déclaré les méthodes getter et setter dans une claa séparée nommée SongsList. Plz m'aider à déterminer le problème ...

+0

Est-il possible de réduire le code à quelque chose de plus digeste? –

+0

Je ne suis pas sûr où l'erreur est ... Alors, pensé que ce serait mieux si je publie le code entier ... Désolé si le code est trop grand. Je pensais qu'il serait facile pour les développeurs de déterminer le problème si je publie le code entier ... –

+0

La trace de la pile montre l'erreur survenue dans MusicListActivity.java à la ligne 81 - qu'est-ce que cela correspond dans le code original? – Paolo

Répondre

0

ProgressDialog p semble être nulle lorsque votre Handler handlerhandleMessage est appelée. Je ne vois pas de code où vous attribuez quelque chose à p, donc je suppose que l'erreur est là ...

+0

Cela a fonctionné. Mais les erreurs follwing se produisent toujours. android.widget.SimpleAdapter.getCount (SimpleAdapter.java:95) android.widget.ListView.setAdapter (ListView.java:431) com.stellent.gorinka.MusicListActivity.list (MusicListActivity.java:76) com. stellent.gorinka.MusicListActivity $ 1.run (MusicListActivity.java:67) android.os.Handler.handleCallback (Handler.java:587) android.os.Handler.dispatchMessage (Handler.java:92) sur android.os .Looper.loop (Looper.java:123) android.os.Handler.handleCallback (Handler.java:587) android.os.Handler.dispatchMessage (Handler.java:92) android.os.Looper.loop (Looper.java:123) –

Questions connexes