I am creating a custom adapter using data from the web. Below is what I've been working on. The logcat says it's having problem at
view = layoutInflater.inflate(R.layout.article_each, null);
in the getView part. This is line 49 of ArticleListAdapter, as indicated in the error line below logcat.
The full logcat around the error is like below. (Is there anyway I can get a more detailed error log?) * I updated the log below! (please let me know if this is still not the right log to provide.)
04-17 22:57:53.408 22401-22401/org.androidtown.slidingexercise20180403 D/InputTransport: Input channel constructed: fd=102
04-17 22:57:53.408 22401-22401/org.androidtown.slidingexercise20180403 D/InputTransport: Input channel destroyed: fd=85
04-17 22:57:53.419 22401-22401/org.androidtown.slidingexercise20180403 D/ViewRootImpl@64962f[Toast]: ThreadedRenderer.create() translucent=true
04-17 22:57:53.425 22401-22401/org.androidtown.slidingexercise20180403 D/InputTransport: Input channel constructed: fd=98
04-17 22:57:53.427 22401-22401/org.androidtown.slidingexercise20180403 D/ViewRootImpl@64962f[Toast]: setView = android.widget.LinearLayout{7f0743c V.E...... ......I. 0,0-0,0} touchMode=true
04-17 22:57:53.430 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup)' on a null object reference
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at org.androidtown.slidingexercise20180403.ArticleListAdapter.getView(ArticleListAdapter.java:49)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.AbsListView.obtainView(AbsListView.java:3238)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.ListView.makeAndAddView(ListView.java:2147)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.ListView.fillDown(ListView.java:767)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.ListView.fillFromTop(ListView.java:833)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.ListView.layoutChildren(ListView.java:1900)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.AbsListView.onLayout(AbsListView.java:3008)
04-17 22:57:53.438 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.439 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
04-17 22:57:53.440 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at com.android.internal.policy.DecorView.onLayout(DecorView.java:884)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.View.layout(View.java:18804)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:5951)
04-17 22:57:53.441 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2659)
04-17 22:57:53.442 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2375)
04-17 22:57:53.442 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1526)
04-17 22:57:53.442 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7102)
04-17 22:57:53.442 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
04-17 22:57:53.442 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.Choreographer.doCallbacks(Choreographer.java:702)
04-17 22:57:53.442 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.Choreographer.doFrame(Choreographer.java:638)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.os.Looper.loop(Looper.java:154)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6682)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at java.lang.reflect.Method.invoke(Native Method)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
04-17 22:57:53.443 22401-22401/org.androidtown.slidingexercise20180403 W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
04-17 22:57:53.445 22401-22401/org.androidtown.slidingexercise20180403 D/AndroidRuntime: Shutting down VM
04-17 22:57:53.451 22401-22401/org.androidtown.slidingexercise20180403 E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.androidtown.slidingexercise20180403, PID: 22401
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at org.androidtown.slidingexercise20180403.ArticleListAdapter.getView(ArticleListAdapter.java:55)
at android.widget.AbsListView.obtainView(AbsListView.java:3238)
at android.widget.ListView.makeAndAddView(ListView.java:2147)
at android.widget.ListView.fillDown(ListView.java:767)
at android.widget.ListView.fillFromTop(ListView.java:833)
at android.widget.ListView.layoutChildren(ListView.java:1900)
at android.widget.AbsListView.onLayout(AbsListView.java:3008)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:884)
at android.view.View.layout(View.java:18804)
at android.view.ViewGroup.layout(ViewGroup.java:5951)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2659)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2375)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1526)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7102)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
at android.view.Choreographer.doCallbacks(Choreographer.java:702)
at android.view.Choreographer.doFrame(Choreographer.java:638)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
I've tried many different ways but still can't figure out what has gone wrong. I would be grateful for any suggestion and comment! Thank you!
Below is the custom adapter I am creating,
package org.androidtown.slidingexercise20180403;
import android.app.Activity;
import android.content.Context;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
class ArticleListAdapter extends BaseAdapter implements ListAdapter {
Context context;
ArrayList<HashMap<String, String>> articleList;
LayoutInflater layoutInflater;
public ArticleListAdapter (Context context, ArrayList<HashMap<String, String>> articleList) {
super();
this.articleList = articleList;
this.context = context;
layoutInflater = LayoutInflater.from(context);
}
@Override public int getCount() {
if(articleList==null)
return 0;
else
return articleList.size();
}
@Override public HashMap<String, String> getItem(int position) {
if(null==articleList) return null;
else
return articleList.get(position);
}
@Override public long getItemId(int position) {
return position;
}
@Override public View getView(int position, View view, ViewGroup parent) {
view = layoutInflater.inflate(R.layout.article_each, null);
TextView titleView =(TextView)view.findViewById(R.id.title);
HashMap<String, String> eacharticle = articleList.get(position);
if(eacharticle != null ) {
String title = eacharticle.get("title");
titleView.setText(title);
}
return view;
}
}
and below is ArticleList activity.
package org.androidtown.slidingexercise20180403;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.ListView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import static java.lang.Integer.parseInt;
public class ArticleList extends AppCompatActivity {
Intent intent;
String articlelist;
JSONArray jsonArray;
ArrayList<HashMap<String, String>> articleList;
ListView ArticleListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.article_list);
intent = getIntent();
articlelist = intent.getStringExtra("articlelist");
articleList = new ArrayList<HashMap<String, String>>();
ArticleListView = (ListView) findViewById(R.id.articlelistbox);
getArticleList(articlelist);
}
public void getArticleList(String url) {
class GetDataJSON extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String uri = "http://www.critiquers.org/android/articlelist.php?articlelist="+params[0];
BufferedReader bufferedReader = null;
try {
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
StringBuilder sb = new StringBuilder();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "\n");
}
return sb.toString().trim();
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(String result) {
try {
jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
String no = c.getString("no");
String url = c.getString("url");
String title = c.getString("title");
String date_mktime = c.getString("date_mktime");
String media = c.getString("media");
String media_no = c.getString("media_no");
String author = c.getString("author");
String author_no = c.getString("author_no");
String facebook_no= c.getString("facebook_no");
String rep_image= c.getString("rep_image");
HashMap<String, String> addarticle = new HashMap<String, String>();
addarticle.put("no", "no");
addarticle.put("url", "url");
addarticle.put("title", "title");
addarticle.put("media", "media");
addarticle.put("media_no", "media_no");
addarticle.put("author", "author");
addarticle.put("author_no", "author_no");
addarticle.put("date_mktime", "date_mktime");
addarticle.put("facebook_no", "facebook_no");
addarticle.put("rep_image", "rep_image");
articleList.add(addarticle);
}
Integer size = articleList.size();
String sizeTxt = size.toString();
Toast.makeText (ArticleList.this, sizeTxt, Toast.LENGTH_LONG).show();
//아래에 정의될 커스텀어댑터 클래스로 어댑터를 설졍한다
ArticleListAdapter articleadapter = new ArticleListAdapter(
ArticleList.this,
articleList
);
ArticleListView.setAdapter(articleadapter);
} catch (JSONException e) {
e.printStackTrace();
}//end try catch
}//end onPostExecute
}//end GetDataJSON
GetDataJSON g = new GetDataJSON();
g.execute(url);
}//end getArticleList
public void xClicked(View v){
finish();
}
}