Android 将数据解析到listview时出错
第63行和第23行的NullPointerException。我对此感到沮丧。我遵循教程中的每一个字母。但仍然会出现错误。请帮忙。一旦我完成了这项分析工作,我现在肯定能毕业了。我真的需要帮助 下面是我的教程: My Parser.javaAndroid 将数据解析到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>
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;
}