Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ListView NullPointerException_Java_Android_Listview_Nullpointerexception - Fatal编程技术网

Java Android ListView NullPointerException

Java Android ListView NullPointerException,java,android,listview,nullpointerexception,Java,Android,Listview,Nullpointerexception,我在填充列表视图时遇到问题。Logcat显示NullPointerExcepton。我也在下面发布了代码和日志 代码编写得很匆忙,我只是个初学者。因此,请指出任何错误或建议 package com.rj.unical; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Doc

我在填充
列表视图时遇到问题。Logcat显示
NullPointerExcepton
。我也在下面发布了代码和日志

代码编写得很匆忙,我只是个初学者。因此,请指出任何错误或建议

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



}

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


}

我认为这不是正确的方法。。因为您正在使用异步任务。。。在不同的线程中运行。。。当它返回结果时。。。oncreate已执行…适配器为空,因为异步任务尚未返回任何结果。。。所以它给了您空指针异常…

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

如果您试图在某个后台线程中加载system contain视图,则可能会产生错误

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;
        }
    }
    ///////////////
}
公共类UnicalNotificationsActivity扩展了ListActivity{
字符串notificationlinks[]=新字符串[100];
字符串notificationnames[]=新字符串[100];
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//创建列表视图
ArrayAdapter=新的ArrayAdapter(UnicalNotificationsActivity.this,R.layout.examples,notificationnames);
setListAdapter(适配器);
ListView lv=getListView();
//设置项单击侦听器
lv.setTextFilterEnabled(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
//单击项目时,将相应的链接发送到getResults类
Intent i=新的Intent(getApplicationContext(),getResults.class);
i、 putExtra(“examlink”,notificationlinks[(int)arg3]);
星触觉(i);
}
});
新建DownloadNotificationTask().execute();
}
/////////////////////////
私有类DownloadNotificationTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
Toast.makeText(UnicalNotificationsActivity.this,“加载”,Toast.LENGTH\u LONG);
}
@凌驾
受保护的void onPostExecute(字符串结果){
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
URL uni=null;
试一试{
uni=新URL(“http://universityofcalicut.info/index.php?option=com_content&task=view&id=744&Itemid=324");
}捕获(格式错误){
e、 printStackTrace();
}
字符串url=uni.toString();
单据单据=空;
试一试{
doc=Jsoup.connect(url.get();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Elements links=doc.select(“a[href]”);
int指数=-1;
int i=0;
//迭代每个链接,仅选择字符串包含202.88.252.6的链接
用于(元素链接:链接){
指数=-1;
index=link.attr(“abs:href”).indexOf(“.pdf”);

如果(index!=-1&&link.attr(“abs:href”)!=null&&link.text()!=null&&link.text()&&I您能给我一点颜色看看您想做什么吗?您有ArrayAdapter.java,然后查看第行。355@Alex我试图将一组链接和相应的文本放入两个字符串数组notificationlinks和notificationnames中,然后使用ListView lv显示notificationnames。链接和文本使用Asy下载ncTask。抱歉。找到了NullPointerException的原因。我没有增加变量I。真的是个愚蠢的错误。谢谢你的回复。但是这使得首先创建列表,然后启动异步任务,结果是一个空列表。是异步任务将字符串下载到notificationnames。不管列表是否创建了一个first..创建列表后填充adepter..不工作。引发未捕获的异常。我在doInBackground()中尝试了Log.d()但是它没有被记录。这是否意味着运行代码的te没有进入后台功能?onPreExecute工作正常,我现在无法测试它,因为网站没有响应。套接字超时错误。这就引出了我的下一个问题。是否可以显示一个说“网络错误”的对话框然后优雅地退出,而不是强制关闭应用程序。或者我应该为此打开一个新问题吗?您可以从异步任务中获得一个结果,以给出参数。布尔值将给出数据的结果
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;
        }
    }
    ///////////////
}