2010-04-23 72 views
0

我无法弄清楚为什么我的程序显示空指针异常。 PLZ帮我...以下是节目......空指针异常的原因

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); 
} 

}

下面是相关联的适配器...

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); 
    } 
} 

}

这里是logcat的是显示。 ..

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) 

我有在一个名为SongsList的独立Claa中声明了getter和setter方法。 Plz帮助我确定问题...

+0

是否有可能将代码降低到更易消化的东西? – 2010-04-23 11:03:14

+0

我不知道错误在哪里......所以,如果我发布整个代码会更好......如果代码太大,对不起。如果我发布完整的代码,开发人员很容易确定问题... – 2010-04-23 11:05:49

+0

堆栈跟踪显示在81行的MusicListActivity.java中发生的错误 - 这与原始代码中的对应关系是什么? – Paolo 2010-04-23 11:06:27

回答

0

ProgressDialog p当您的Handler handlerhandleMessage被调用时似乎为空。我看不到任何代码,你分配的东西给P,所以我猜测错误在那里...

+0

它工作正常。但以下错误仍然存​​在。 android.widget.SimpleAdapter.getCount(SimpleAdapter.java:95) android.widget.ListView.setAdapter(ListView.java:431) com.stellent.gorinka.MusicListActivity.list(MusicListActivity.java:76) 融为一体。 stellent.gorinka.MusicListActivity $ 1.run(MusicListActivity.java:67) android.os.Handler.handleCallback(Handler.java:587) android.os.Handler.dispatchMessage(Handler.java:92) at 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) – 2010-04-23 11:23:55