Santosh  V M
Santosh V M

Reputation: 1561

Android App running in debugger, but not in run mode

I have the following json parser.

    public class JSONParserThreaded extends AsyncTask<String, Integer, String>
{
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    JSONObject processedjObj =null;

    JSONParserThreaded()
    {

    }

    @Override
    protected String doInBackground(String... params) 
    {
        // TODO Auto-generated method stub
        String url = params[0];
        try
        {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent(); 
        }
        catch (UnsupportedEncodingException e) 
        {
            e.printStackTrace();
        } 
        catch (ClientProtocolException e) 
        {
            e.printStackTrace();
        } catch (IOException e) 
        {
            e.printStackTrace();
        }

        try 
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) 
            {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

        } 
        catch (Exception e) 
        {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try 
        {
            jObj = new JSONObject(json);
            setJSONObject(jObj);

        } 
        catch (JSONException e) 
        {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String

        return "Sucess";
    }

    void setJSONObject(JSONObject jObject)
    {
        processedjObj = jObject;
    }

    JSONObject returnJSONObject()
    {
        return processedjObj;
    }

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

    }
}

I'm using the parser in the following code

    public class CategoryScreenActivity extends Activity
{
    private static String url = "http://www.network.com/store/getCategories.php";

    static final String TAG_CATEGORY = "categories";
    static final String TAG_CATEGORY_NAME = "name";
    static final String TAG_CATEGORY_ID = "id";
    static final String TAG_CATEGORY_THUMBNAIL_URL = "thumbnail";
    static final String TAG_CATEGORY_IMAGE_MEDIUM_URL = "image_medium";
    static final String TAG_CATEGORY_IMAGE_LARGE_URL = "image_large";

    JSONArray categories = null;
    JSONObject wholeCategory = null;

    ListView mainListView;
    ListAdpater adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_view);

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

        /*JSONParser jParser = new JSONParser();

        JSONObject json = jParser.getJSONFromURL(url);*/

        JSONParserThreaded jParserThread = new JSONParserThreaded();
        jParserThread.execute(url);

        try
        {
            //Getting Array of Categories
            wholeCategory = jParserThread.returnJSONObject();
            =>  categories = wholeCategory.getJSONArray(TAG_CATEGORY);  <=



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

                String cname = c.getString(TAG_CATEGORY_NAME);
                String cid = c.getString(TAG_CATEGORY_ID);
                String cThumbNailWithBackSlash = c.getString(TAG_CATEGORY_THUMBNAIL_URL);
                String cImageMediumWithBackSlash = c.getString(TAG_CATEGORY_IMAGE_MEDIUM_URL);
                String cImageLargeWithBackSLash = c.getString(TAG_CATEGORY_IMAGE_LARGE_URL);

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

                categoryMap.put(TAG_CATEGORY_ID,cid);
                categoryMap.put(TAG_CATEGORY_NAME, cname);
                categoryMap.put(TAG_CATEGORY_THUMBNAIL_URL, cThumbNailWithBackSlash);
                categoryMap.put(TAG_CATEGORY_IMAGE_MEDIUM_URL,cImageMediumWithBackSlash);
                categoryMap.put(TAG_CATEGORY_IMAGE_LARGE_URL,cImageLargeWithBackSLash);

                categoryList.add(categoryMap);
            }
        }
        catch(JSONException e)
        {
            e.printStackTrace();
        }
        mainListView = (ListView)findViewById(R.id.list);
        adapter = new ListAdpater(this, categoryList);
        mainListView.setAdapter(adapter);
    }


}

null pointer exception is being thrown from the line which is enclosed by "=> <=" The app works fine in debugging mode, but not when I run it. Can anyone please help me out?

I have added the stack trace below.

enter image description here

Upvotes: 0

Views: 188

Answers (1)

Marcin Orlowski
Marcin Orlowski

Reputation: 75629

You have to delegate your networking to AsyncTask or IntentService. Doing networking on UI thread is wrong.

Please read this article on that subject. And here is AsyncTask tutorial

Upvotes: 1

Related Questions