Android 将数据解析到listview时出错

Android 将数据解析到listview时出错,android,listview,Android,Listview,第63行和第23行的NullPointerException。我对此感到沮丧。我遵循教程中的每一个字母。但仍然会出现错误。请帮忙。一旦我完成了这项分析工作,我现在肯定能毕业了。我真的需要帮助 下面是我的教程: My Parser.java public class Parser extends AsyncTask<Void,Integer,Integer> { Context c; ListView lv; String data; ArrayList<String>

第63行和第23行的NullPointerException。我对此感到沮丧。我遵循教程中的每一个字母。但仍然会出现错误。请帮忙。一旦我完成了这项分析工作,我现在肯定能毕业了。我真的需要帮助

下面是我的教程:

My Parser.java

public class Parser extends AsyncTask<Void,Integer,Integer> {

Context c;
ListView lv;
String data;

ArrayList<String> categories = new ArrayList<>();
ProgressDialog pd;

public Parser(Context c, String data, ListView lv) {
    this.c = c;
    this.data = data;
    this.lv = lv;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();

    pd = new ProgressDialog(c);
    pd.setTitle("Parser");
    pd.setMessage("Please Wait");
    pd.show();
}

@Override
protected Integer doInBackground(Void... params) {


    return this.parse();
}

@Override
protected void onPostExecute(Integer integer) {
    super.onPostExecute(integer);

    if(integer == 1)
    {
        //ADAPTER
        ArrayAdapter<String> adapter = new ArrayAdapter<>(c, android.R.layout.simple_list_item_1, categories);
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Snackbar.make(view,categories.get(position),Snackbar.LENGTH_SHORT).show();
            }
        });

    }else
    {
        Toast.makeText(c,"Unable to Parse",Toast.LENGTH_SHORT).show();
    }
    pd.dismiss();
}

//PARSE RECEIVED DATA
private int parse(){
    try
    {

        //ADD TGAT DATA TO JSON ARRAY FIRST
        JSONArray ja = new JSONArray(data);

        //CREATE JO OBJECT TO HOLD A SINGLE ITEM
        JSONObject jo = null;

        categories.clear();

        //LOOP THROUGH ARRAY
        for(int i =0 ; i<ja.length();i++)
        {
            jo = ja.getJSONObject(i);
            //RETRIEVE NAME
            String name=jo.getString("cat_name");
            //ADD TO ARRAY LIST
            categories.add(name);

        }
        return 1;
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return 0;
}
}

下载器工作正常

public class Downloader extends AsyncTask<Void,Integer, String> {

Context c;
String address;
ListView lv;

ProgressDialog pd;

public Downloader(Context c, String address, ListView lv) {
    this.c = c;
    this.address = address;
    this.lv = lv;
}

//BEFORE JOB STARTS
@Override
protected void onPreExecute() {
    super.onPreExecute();

    pd = new ProgressDialog(c);
    pd.setTitle("Fetch Data");
    pd.setMessage("Please Wait");
    pd.show();
}

@Override
protected String doInBackground(Void... params) {

    String data = downloadData();
    return data;
}


@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);

    pd.dismiss();

    if(s != null){

        Parser p =new Parser(c,s,lv);
        p.execute();

    }else
    {
        Toast.makeText(c,"Unable to download data",Toast.LENGTH_SHORT).show();
    }
}

private String downloadData(){

    //connect and get a stream

    InputStream is = null;
    String line = null;

    try{

        URL url =  new URL(address);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();

        is = new BufferedInputStream(con.getInputStream());

        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        StringBuffer sb = new StringBuffer();

        if(br != null){

            while((line = br.readLine()) != null)
            {
                sb.append(line+"\n");
            }
        }
        else
        {
            return null;
        }

        return sb.toString();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(is != null){
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return null;
}
公共类下载程序扩展异步任务{
上下文c;
字符串地址;
ListView lv;
进展性帕金森病;
公共下载程序(上下文c、字符串地址、ListView lv){
这个.c=c;
this.address=地址;
this.lv=lv;
}
//工作开始前
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pd=新进度对话框(c);
pd.setTitle(“获取数据”);
pd.setMessage(“请稍候”);
pd.show();
}
@凌驾
受保护字符串doInBackground(无效…参数){
字符串数据=下载数据();
返回数据;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
pd.解散();
如果(s!=null){
Parser p=新的解析器(c,s,lv);
p、 执行();
}否则
{
Toast.makeText(c,“无法下载数据”,Toast.LENGTH_SHORT.show();
}
}
私有字符串下载数据(){
//连接并获取流
InputStream=null;
字符串行=null;
试一试{
URL=新的URL(地址);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
is=新的BufferedInputStream(con.getInputStream());
BufferedReader br=新的BufferedReader(新的InputStreamReader(is));
StringBuffer sb=新的StringBuffer();
如果(br!=null){
而((line=br.readLine())!=null)
{
sb.追加(第+行“\n”);
}
}
其他的
{
返回null;
}
使某人返回字符串();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(is!=null){
试一试{
is.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
返回null;
}

}

findViewById(R.id.lv)
返回null。其中的布局是ID为lv的
列表视图
?顺便说一句,我的选项卡式布局中有一个片段。我现在正试图将MainActivity中的代码放到fragment类中。listview位于我的fragment_primary.xml中。也许这就是我必须做的,对吗?
findviewbyd(R.id.lv)
返回null。其中的布局是ID为lv的
列表视图
?顺便说一句,我的选项卡式布局中有一个片段。我现在正试图将MainActivity中的代码放到fragment类中。listview位于我的fragment_primary.xml中。也许这就是我必须做的,对吗?
public class Downloader extends AsyncTask<Void,Integer, String> {

Context c;
String address;
ListView lv;

ProgressDialog pd;

public Downloader(Context c, String address, ListView lv) {
    this.c = c;
    this.address = address;
    this.lv = lv;
}

//BEFORE JOB STARTS
@Override
protected void onPreExecute() {
    super.onPreExecute();

    pd = new ProgressDialog(c);
    pd.setTitle("Fetch Data");
    pd.setMessage("Please Wait");
    pd.show();
}

@Override
protected String doInBackground(Void... params) {

    String data = downloadData();
    return data;
}


@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);

    pd.dismiss();

    if(s != null){

        Parser p =new Parser(c,s,lv);
        p.execute();

    }else
    {
        Toast.makeText(c,"Unable to download data",Toast.LENGTH_SHORT).show();
    }
}

private String downloadData(){

    //connect and get a stream

    InputStream is = null;
    String line = null;

    try{

        URL url =  new URL(address);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();

        is = new BufferedInputStream(con.getInputStream());

        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        StringBuffer sb = new StringBuffer();

        if(br != null){

            while((line = br.readLine()) != null)
            {
                sb.append(line+"\n");
            }
        }
        else
        {
            return null;
        }

        return sb.toString();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(is != null){
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return null;
}