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