-1

I am not able to find the error android app is forcefully stopped. When I use the general sample data which is commented in this program it works fine but when i use this code it gets crashed.

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.widget.EditText;
import android.widget.ListView;

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

public class MainActivity extends Activity {

    // Declare Variables
    ListView list;
    ListViewAdapter adapter;
    EditText editsearch;
    String[] rank;
    String[] country;
    String[] population;
    ArrayList<WorldPopulation> arraylist = new ArrayList<WorldPopulation>();

    public String loadJSONFromAsset() {
        String json = null;
        try {
            InputStream is = getAssets().open("data.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            json = new String(buffer, "UTF-8");
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_main);

        try {
            JSONObject obj = new JSONObject(loadJSONFromAsset());
            JSONArray m_jArry = obj.getJSONArray("maindata");
            rank = new String[m_jArry.length()];
            country = new String[m_jArry.length()];
            population = new String[m_jArry.length()];
            for (int i = 0; i < m_jArry.length(); i++) {
                JSONObject jo_inside = m_jArry.getJSONObject(i);
                rank[i] = jo_inside.getString("rank");
                country[i] = jo_inside.getString("country");
                population[i] = jo_inside.getString("population");
                System.out.println(rank[i]);
            }
        }catch (JSONException e){
            e.printStackTrace();
        }
        // Generate sample data
        /*rank = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

        country = new String[] { "China", "India", "United States",
                "Indonesia", "Brazil", "Pakistan", "Nigeria", "Bangladesh",
                "Russia", "Japan" };

        population = new String[] { "1,354,040,000", "1,210,193,422",
                "315,761,000", "237,641,326", "193,946,886", "182,912,000",
                "170,901,000", "152,518,015", "143,369,806", "127,360,000" };*/



        // Locate the ListView in listview_main.xml
        list = (ListView) findViewById(R.id.listview);

        for (int i = 0; i < rank.length; i++)
        {
            WorldPopulation wp = new WorldPopulation(rank[i], country[i],
                    population[i]);
            // Binds all strings into an array
            arraylist.add(wp);
        }

        // Pass results to ListViewAdapter Class
        adapter = new ListViewAdapter(this, arraylist);

        // Binds the Adapter to the ListView
        list.setAdapter(adapter);

        // Locate the EditText in listview_main.xml
        editsearch = (EditText) findViewById(R.id.search);

        // Capture Text in EditText
        editsearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                String text = editsearch.getText().toString().toLowerCase(Locale.getDefault());
                adapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
                // TODO Auto-generated method stub
            }
        });
    }
}

Json file contains :

{
    "maindata": [
        {
            "country": "rumbo",
            "rank": "45",
            "population": "45000"
        },
        {
            "country": "reck",
            "rank": "46",
            "population": "4500"
        }
    ]
}

01-13 06:22:27.024 2057-2057/? E/memtrack: Couldn't load memtrack module (No such file or directory)
01-13 06:22:27.024 2057-2057/? E/android.os.Debug: failed to load memtrack module: -2
01-13 06:22:27.045 2057-2070/? E/art: Thread attaching while runtime is shutting down: Binder_2
01-13 06:22:27.406 2073-2073/? E/memtrack: Couldn't load memtrack module (No such file or directory)
01-13 06:22:27.406 2073-2073/? E/android.os.Debug: failed to load memtrack module: -2
01-13 06:22:27.707 2086-2086/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.robosoft.elections, PID: 2086
                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.robosoft.elections/com.robosoft.elections.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
                                                     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)
                                                  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                                     at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
                                                     at org.json.JSONTokener.nextValue(JSONTokener.java:94)
                                                     at org.json.JSONObject.<init>(JSONObject.java:156)
                                                     at org.json.JSONObject.<init>(JSONObject.java:173)
                                                     at com.robosoft.elections.MainActivity.onCreate(MainActivity.java:55)
                                                     at android.app.Activity.performCreate(Activity.java:5933)
                                                     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) 
01-13 06:22:27.754 735-735/? E/EGL_emulation: tid 735: eglCreateSyncKHR(1181): error 0x3004 (EGL_BAD_ATTRIBUTE)
HaveNoDisplayName
  • 8,291
  • 106
  • 37
  • 47
rumborock
  • 1
  • 2
  • @chandil03 hey logcat file is too large so i have uploaded it over here. please have a look http://wikisend.com/download/354580/stckoverflow.txt – rumborock Jan 13 '16 at 11:06
  • there is no `data.json` file in your asset folder. That is what forcing your app to close. – Sachin Chandil Jan 13 '16 at 11:10
  • Minimize your logcat output (should contain only your error, do not copy everything) and post it here, please. – yennsarah Jan 13 '16 at 11:10
  • @chandil03 i have created a assets folder in resources and copied the file into the assets folder but the assets folder is not shown in the project. – rumborock Jan 13 '16 at 11:11
  • @Amy if i know the error why will i ask you ? -_- – rumborock Jan 13 '16 at 11:12
  • The error is in your log cat among many other things, if you are not sure what the error is, post the full logcat on stackoverflow, it may be shortened by editors. – yennsarah Jan 13 '16 at 11:15
  • Try to create a `raw` directory in `res` and put your `json` file there. – yennsarah Jan 13 '16 at 11:16
  • @rumborock Which IDE are you using? – Sachin Chandil Jan 13 '16 at 11:16
  • @Amy cannot add more than 30000 words. logcat is way more than that – rumborock Jan 13 '16 at 11:17
  • @chandil03 I am using android studio – rumborock Jan 13 '16 at 11:17
  • in the `Android Monitor` (where your logcat is), change the `Log level` from `Verbose` to `Error`. Also make sure you have selected the right package, even if stated so, click on `your.package.name` right beside your Device in the `Android Monitor`. – yennsarah Jan 13 '16 at 11:20
  • @Amy thanks :D edited – rumborock Jan 13 '16 at 11:24
  • Next time, be more polite, please. I was only trying to help you. (Regarding your smiley from above) ;) – yennsarah Jan 13 '16 at 11:26
  • So, your specific error is here `Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference` and ` at com.robosoft.elections.MainActivity.onCreate(MainActivity.java:55)` (always search for lines like these!, Check [here](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it)) What is on line 55 of your `MainActivity`? – yennsarah Jan 13 '16 at 11:27
  • @rumborock check my answer. – Sachin Chandil Jan 13 '16 at 11:29

1 Answers1

0

You need to create asset folder on right location in you project directory.

For that follow following direction: 1. switch to Project Files from dropdown on top of project tab. 2. Navigate to app > src/main. 3. Create asset directory in src/main directory and copy data.json file.

And you are good to go.

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