2012-03-10 119 views
0

我在填充ListView时出现问题。 Logcat显示NullPointerExcepton。我也发布了下面的代码和logcat。Android ListView空指针异常

代码很匆忙,我只是一个初学者。所以请指出任何错误或建议。

package com.rj.unical; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class UnicalNotificationsActivity extends ListActivity { 

     String notificationlinks[] = new String[100]; 
     String notificationnames[] = new String[100]; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


      //Create a list view 


     new DownloadNotificationTask().execute(); 

    } 


    ///////////////////////// 
    private class DownloadNotificationTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected void onPreExecute(){ 
      Toast.makeText(UnicalNotificationsActivity.this ,"Loading", Toast.LENGTH_LONG); 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      ArrayAdapter<String> adapter=new ArrayAdapter<String>(UnicalNotificationsActivity.this,R.layout.exams,notificationnames); 
      setListAdapter(adapter); 
      ListView lv = getListView(); 

      //Set item click listener 
      lv.setTextFilterEnabled(true); 
      lv.setOnItemClickListener(new OnItemClickListener() { 

        @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
        //When an item is clicked, send the corresponding link to getResults class 
         Intent i = new Intent(getApplicationContext(), getResults.class);  
         i.putExtra("examlink", notificationlinks[(int)arg3]); 
         startActivity(i); 

        } 

       }); 

     } 
     @Override 
     protected String doInBackground(String... arg0) { 
      URL uni = null; 
      try { 
       uni = new URL("http://universityofcalicut.info/index.php?option=com_content&task=view&id=744&Itemid=324"); 
      } catch (MalformedURLException e) { 

       e.printStackTrace(); 
      } 

      String url=uni.toString(); 
      Document doc = null; 

       try { 
        doc = Jsoup.connect(url).get(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       Elements links = doc.select("a[href]"); 
       int index=-1; 
       int i=0; 


       //Iterate every link and select only those with the string containing 202.88.252.6 
       for (Element link : links) { 
        index=-1; 
        index=link.attr("abs:href").indexOf(".pdf"); 

        if(index!=-1 && link.attr("abs:href")!=null && link.text()!=null && link.text()!=" " && i<100) 
        { 
         //Store the link and corresponding names 
         notificationlinks[i]=link.attr("abs:href"); 
         notificationnames[i]=link.text(); 

         Log.d("PDF FOUND", notificationlinks[i]); 
        } 
        } 
      return null; 
     } 



} 

    /////////////// 


} 

这里是logcat的

03-06 11:11:43.116: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/CCSSUGIII120112.pdf 
03-06 11:11:43.126: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/NotfnIIIBAMS12112.pdf 
03-06 11:11:43.137: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/NotifnMomoeoThesis12112.pdf 
03-06 11:11:43.166: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/NotifnPGCCSS1stFolkloreExamchange10112.pdf 
03-06 11:11:43.176: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/NotiBA_POT_%20PvtRegn2012.pdf 
03-06 11:11:43.196: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/MEDexamchange020112.pdf 
03-06 11:11:43.216: D/PDF FOUND(2626): http://universityofcalicut.info/notifications/afsaladibprefinal2012.pdf 
03-06 11:11:43.236: D/AndroidRuntime(2626): Shutting down VM 
03-06 11:11:43.236: W/dalvikvm(2626): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
03-06 11:11:43.256: E/AndroidRuntime(2626): FATAL EXCEPTION: main 
03-06 11:11:43.256: E/AndroidRuntime(2626): java.lang.NullPointerException 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.AbsListView.obtainView(AbsListView.java:1315) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.ListView.makeAndAddView(ListView.java:1727) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.ListView.fillDown(ListView.java:652) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.ListView.fillFromTop(ListView.java:709) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.ListView.layoutChildren(ListView.java:1580) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.AbsListView.onLayout(AbsListView.java:1147) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.View.layout(View.java:7035) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1045) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.os.Looper.loop(Looper.java:123) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-06 11:11:43.256: E/AndroidRuntime(2626):  at dalvik.system.NativeStart.main(Native Method) 
+0

你能不能给多一点的颜色为你想要做什么它可能会产生一个错误? – 2012-03-10 09:44:46

+0

你有ArrayAdapter.java,然后看到行号355 – 2012-03-10 09:46:08

+0

@Alex我想获取一组链接和相应的文本到两个字符串数组,通知链接和通知名称,然后使用ListView lv显示通知名称。链接和文本使用AsyncTask进行下载。 – rahules 2012-03-10 11:12:21

回答

0

这里我修改了一些快速代码..

那里,如果你试图加载系统包含查看一些后台线程

public class UnicalNotificationsActivity extends ListActivity { 
    String notificationlinks[] = new String[100]; 
    String notificationnames[] = new String[100]; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Create a list view 
     ArrayAdapter<String> adapter=new ArrayAdapter<String>(UnicalNotificationsActivity.this,R.layout.exams,notificationnames); 
     setListAdapter(adapter); 
     ListView lv = getListView(); 

     //Set item click listener 
     lv.setTextFilterEnabled(true); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
       //When an item is clicked, send the corresponding link to getResults class 
       Intent i = new Intent(getApplicationContext(), getResults.class);  
       i.putExtra("examlink", notificationlinks[(int)arg3]); 
       startActivity(i); 

      } 

     }); 

     new DownloadNotificationTask().execute(); 
    } 


    ///////////////////////// 
    private class DownloadNotificationTask extends AsyncTask<String, Void, String> { 
     @Override 
      protected void onPreExecute(){ 
      Toast.makeText(UnicalNotificationsActivity.this ,"Loading", Toast.LENGTH_LONG); 
     } 
     @Override 
      protected void onPostExecute(String result) { 


     } 
     @Override 
      protected String doInBackground(String... arg0) { 
      URL uni = null; 
      try { 
       uni = new URL("http://universityofcalicut.info/index.php?option=com_content&task=view&id=744&Itemid=324"); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 

      String url=uni.toString(); 
      Document doc = null; 

      try { 
       doc = Jsoup.connect(url).get(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Elements links = doc.select("a[href]"); 
      int index=-1; 
      int i=0; 

      //Iterate every link and select only those with the string containing 202.88.252.6 
      for (Element link : links) { 
       index=-1; 
       index=link.attr("abs:href").indexOf(".pdf"); 

       if(index!=-1 && link.attr("abs:href")!=null && link.text()!=null && link.text()!=" " && i<100) 
       { 
        //Store the link and corresponding names 
        notificationlinks[i]=link.attr("abs:href"); 
        notificationnames[i]=link.text(); 

        Log.d("PDF FOUND", notificationlinks[i]); 
       } 
      } 
      return null; 
     } 
    } 
    /////////////// 
} 
+0

但这会使列表首先被创建,然后启动异步任务,从而产生一个空列表。这是将字符串下载到通知名称中的异步任务。 – rahules 2012-03-10 11:03:00

+0

不要紧,如果列表创建第一..你填写清单后创建章节.. – dhams 2012-03-10 11:14:47

+0

无法正常工作。抛出未捕获的异常。我在doInBackground()中尝试了Log.d(),但没有记录。这是否意味着运行代码没有进入后台功能? onPreExecute正常工作 – rahules 2012-03-10 12:07:09

0

我认为这是不正确的做法。由于您使用的是异步任务...它运行在不同的线程...和时间它会返回结果... oncreate被执行...并且适配器为空,因为异步任务尚未返回任何结果...所以它给你空指针异常...

+0

对不起。找出NullPointerException的原因。我没有增加变量i。真是愚蠢的错误。谢谢回复。 – rahules 2012-03-10 10:04:50