-1

Listactivity.java

package com.sample.mpassbook.mpassbook_d;

    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;

    import com.sample.mpassbook.httpconnection.Httpmanager;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.util.ArrayList;
    import java.util.HashMap;

    /**
     * Created by abhil on 22/07/15.
     */
    public class ListActivity extends android.app.ListActivity {
        private ProgressDialog pDialog;
        private static String url="https://fierce-tundra-4082.herokuapp.com/transactions/?msisdn=456&account=123&from_date=2015-07-10&format=json";
    //    public static final String TAG_acnum = "account_number";
    //    public static final String TAG_mnum = "mobile_number";
        public static final String TAG_content = "content";
        public static final String TAG_bankid = "bank_id";
        public static final String TAG_status = "details";
        public static final String TAG_Date = "date";
        public static final String TAG_cval = "amount";
    //    public static final String TAG_dval = "debit_val";
        public static final String TAG_bal = "balance";


        JSONArray content = null;

        ArrayList<HashMap<String, String>> contentlist;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.list_activity);

            ListView lv = getListView();

            new getlist().execute();

        }
        private class getlist extends AsyncTask<Void,Void,Void> {

            @Override
            protected Void doInBackground(Void... params) {
                Httpmanager hm = new Httpmanager();


                String jsonstr = hm.makeServiceCall(url, Httpmanager.get);

                Log.d("Response: ", "> " + jsonstr);

                if (jsonstr != null) {
                    try {
                        JSONObject jsonObject = new JSONObject(jsonstr);
                        content = jsonObject.getJSONArray(TAG_content);


                        for (int i = 0; i < content.length(); i++) {
                            JSONObject c = content.getJSONObject(i);

                            String bank_id = c.getString(TAG_bankid);
                            String details = c.getString(TAG_status);
                            String date = c.getString(TAG_Date);
                            String amount = c.getString(TAG_cval);
                            String balance = c.getString(TAG_bal);

                            HashMap<String, String> contents = new HashMap<String, String>();

                            contents.put(TAG_bankid, "TRANSACTION ID : " +bank_id);
                            contents.put(TAG_status, "" +details);
                            contents.put(TAG_Date,"" +date);
                            contents.put(TAG_cval, "" +amount);

                            contentlist.add(contents);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } else {
                    Log.e("HttpManager", "Couldn't get any data from the url");
                    runOnUiThread(new Runnable() {

                        public void run() {

                            Toast.makeText(getApplicationContext(), "CHECK YOUR NETWORK CONNECTION", Toast.LENGTH_LONG).show();

                        }
                    });

                }

                return null;
            }



            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(ListActivity.this);
                pDialog.setMessage("Please wait...");
                pDialog.setCancelable(false);
                pDialog.show();
            }
            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                if (pDialog.isShowing())
                    pDialog.dismiss();

                ListAdapter adapter = new SimpleAdapter(ListActivity.this, contentlist, R.layout.item, new String[]{TAG_bankid, TAG_status, TAG_Date, TAG_cval},
                        new int[]{R.id.bankid, R.id.status, R.id.date, R.id.cval});
                setListAdapter(adapter);


            }
        }






    }

list_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@android:id/list"/>

</LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:id="@+id/item">

    <TextView
        android:id="@+id/bankid"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:paddingTop="6dip"
        android:textColor="#5d5d5d"
        android:text="bankid"
        android:textSize="16sp"
        android:textStyle="bold"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <TextView
        android:id="@+id/status"
        android:layout_width="67dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:text="status"
        android:textStyle="bold"
        android:textColor="#5d5d5d"
        android:layout_below="@+id/bankid"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/dval"
        android:layout_width="78dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:textColor="#43bd00"
        android:textStyle="bold"
        android:text="dval"
        android:layout_gravity="right"
        android:layout_above="@+id/date"
        android:layout_alignRight="@+id/bankid"
        android:layout_alignEnd="@+id/bankid" />

    <TextView
        android:id="@+id/cval"
        android:layout_width="78dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:text="cval"
        android:textStyle="bold"
        android:textColor="#FF0000"
        android:layout_gravity="right"
        android:layout_below="@+id/bankid"
        android:layout_alignRight="@+id/bankid"
        android:layout_alignEnd="@+id/bankid" />

    <TextView
        android:id="@+id/date"
        android:layout_width="71dp"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="date"
        android:textColor="#5d5d5d"
        android:textStyle="bold"
        android:layout_below="@+id/status"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

Logcat message

07-23 18:41:35.101  22014-22034/com.sample.mpassbook.mpassbook_d E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.sample.mpassbook.mpassbook_d, PID: 22014
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
        at com.sample.mpassbook.mpassbook_d.ListActivity$getlist.doInBackground(ListActivity.java:86)
        at com.sample.mpassbook.mpassbook_d.ListActivity$getlist.doInBackground(ListActivity.java:53)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
07-23 18:41:40.963  22014-22014/com.sample.mpassbook.mpassbook_d I/Choreographer﹕ Skipped 42 frames!  The application may be doing too much work on its main thread.
07-23 18:41:41.192  22014-22014/com.sample.mpassbook.mpassbook_d E/WindowManager﹕ android.view.WindowLeaked: Activity com.sample.mpassbook.mpassbook_d.ListActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{38c12a7d V.E..... R......D 0,0-1026,348} that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
        at android.app.Dialog.show(Dialog.java:298)
        at com.sample.mpassbook.mpassbook_d.ListActivity$getlist.onPreExecute(ListActivity.java:168)
        at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
        at android.os.AsyncTask.execute(AsyncTask.java:535)
        at com.sample.mpassbook.mpassbook_d.ListActivity.onCreate(ListActivity.java:50)
        at android.app.Activity.performCreate(Activity.java:5937)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

have setted all adapters still am getting this error kindly give suggestions to resolve so will get move on with the project.

Danielson
  • 2,605
  • 2
  • 28
  • 51
abhil nair
  • 188
  • 1
  • 1
  • 15
  • possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – ci_ Jul 23 '15 at 13:25

2 Answers2

0

You have a NullPointerException because you never initialize contentlist. You can do that on the same spot where you declare it, like so :

ArrayList<HashMap<String, String>> contentlist = new ArrayList<HashMap<String, String>>();

On a side note, it's a good practice to use the interface rather than implementation wherever you can. For example, here, contentlist could be a List instead of ArrayList

2Dee
  • 8,609
  • 7
  • 42
  • 53
0

You have not initialized contentlist object. try initializing it in doInBackground() method. initializing it at where declaration is performed will cause your contentlist object to have repeated values when asyncTask is executed more than once. Because it is not reinitialized again.

Try Following code:

package com.sample.mpassbook.mpassbook_d; 

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.sample.mpassbook.httpconnection.Httpmanager; 

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

/** 
 * Created by abhil on 22/07/15. 
 */ 
public class ListActivity extends android.app.ListActivity {
    private ProgressDialog pDialog;
    private static String url="https://fierce-tundra-4082.herokuapp.com/transactions/?msisdn=456&account=123&from_date=2015-07-10&format=json";
//    public static final String TAG_acnum = "account_number"; 
//    public static final String TAG_mnum = "mobile_number"; 
    public static final String TAG_content = "content";
    public static final String TAG_bankid = "bank_id";
    public static final String TAG_status = "details";
    public static final String TAG_Date = "date";
    public static final String TAG_cval = "amount";
//    public static final String TAG_dval = "debit_val"; 
    public static final String TAG_bal = "balance";


    JSONArray content = null;

    ArrayList<HashMap<String, String>> contentlist;


    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_activity);

        ListView lv = getListView();

        new getlist().execute();

    } 
    private class getlist extends AsyncTask<Void,Void,Void> {

        @Override 
        protected Void doInBackground(Void... params) {
            Httpmanager hm = new Httpmanager();
            // initialization to be added in you code.
            contentlist = new ArrayList<>();
            String jsonstr = hm.makeServiceCall(url, Httpmanager.get);

            Log.d("Response: ", "> " + jsonstr);

            if (jsonstr != null) {
                try { 
                    JSONObject jsonObject = new JSONObject(jsonstr);
                    content = jsonObject.getJSONArray(TAG_content);


                    for (int i = 0; i < content.length(); i++) {
                        JSONObject c = content.getJSONObject(i);

                        String bank_id = c.getString(TAG_bankid);
                        String details = c.getString(TAG_status);
                        String date = c.getString(TAG_Date);
                        String amount = c.getString(TAG_cval);
                        String balance = c.getString(TAG_bal);

                        HashMap<String, String> contents = new HashMap<String, String>();

                        contents.put(TAG_bankid, "TRANSACTION ID : " +bank_id);
                        contents.put(TAG_status, "" +details);
                        contents.put(TAG_Date,"" +date);
                        contents.put(TAG_cval, "" +amount);

                        contentlist.add(contents);
                    } 
                } catch (JSONException e) {
                    e.printStackTrace();
                } 
            } else { 
                Log.e("HttpManager", "Couldn't get any data from the url");
                runOnUiThread(new Runnable() {

                    public void run() { 

                        Toast.makeText(getApplicationContext(), "CHECK YOUR NETWORK CONNECTION", Toast.LENGTH_LONG).show();

                    } 
                }); 

            } 

            return null; 
        } 



        @Override 
        protected void onPreExecute() { 
            super.onPreExecute(); 
            pDialog = new ProgressDialog(ListActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        } 
        @Override 
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if (pDialog.isShowing())
                pDialog.dismiss();

            ListAdapter adapter = new SimpleAdapter(ListActivity.this, contentlist, R.layout.item, new String[]{TAG_bankid, TAG_status, TAG_Date, TAG_cval},
                    new int[]{R.id.bankid, R.id.status, R.id.date, R.id.cval});
            setListAdapter(adapter);


        } 
    } 






} 
Sachin Chandil
  • 17,133
  • 8
  • 47
  • 65