Android ListView NullPointerException - PullRequest
       9

Android ListView NullPointerException

0 голосов
/ 10 марта 2012

У меня проблемы с заполнением ListView. Logcat показывает NullPointerExcepton. Я также разместил код и logcat ниже.

Код был написан на скорую руку, и я только начинающий. Поэтому, пожалуйста, укажите на любые ошибки или предложения.

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



}

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


}

вот логкат

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)

Ответы [ 2 ]

0 голосов
/ 10 марта 2012

Здесь я изменил какой-то быстрый код ..

там может возникнуть ошибка, если вы попытаетесь загрузить систему, содержащую представление, в каком-то фоновом потоке

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 голосов
/ 10 марта 2012

Я думаю, что это не правильный подход ... потому что вы используете асинхронную задачу ... которая выполняется в другом потоке ... и к тому времени, когда она возвращает результат ... выполняется oncreate ... и Адаптер пуст, поскольку асинхронная задача еще не дала результата ... поэтому он выдает исключение нулевого указателя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...