1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

Java Problem - Listview

Discussion in 'Programming' started by scottlpool2003, Jan 16, 2015.

  1. #1
    I'm trying to create an Android app and I've only limited experience with Java so this is my first real-world app.

    What I'm trying to do is create a listview and the end result I am looking for is similar to:

    +========+
    |SCROLLVIEW |
    +========+
    |Listview line 1|
    |Listview line 2|
    |Listview line 1|
    |Listview line 2|
    |Listview line 1|
    |Listview line 2|
    +========+

    I'm struggling even getting the listview working though with a nullpointer exception. I've noted it down as
    I'm a little clueless as to where to go from here so if anyone could help I'd be grateful.

    
    package info.androidhive.slidingmenu;
    
    import android.app.Fragment;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.StatusLine;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class PhotosFragment extends Fragment {
        public PhotosFragment(){}
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_photos, container, false);
            new RequestTask().execute("http://www.myjsonurl.co.uk/app/index.php?Type=8&catid=7&userid=4");
    
            return rootView;
        }
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
    
            Log.v("created", "onActivityCreated()");
            setHasOptionsMenu(true);
    
        }
        private static final String TAG = MainActivity.class.getSimpleName();
        private static List<ListViewItem> mItems;        // ListView items list
        JSONObject obj;
        JSONArray stories;
    
        public class RequestTask extends AsyncTask<String, String, String> {
    
            @Override
            protected String doInBackground(String... uri) {
                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response;
                String responseString = null;
                try {
    
                    response = httpclient.execute(new HttpGet(uri[0]));
                    StatusLine statusLine = response.getStatusLine();
                    if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
                        ByteArrayOutputStream out = new ByteArrayOutputStream();
                        response.getEntity().writeTo(out);
    
                        out.close();
                        responseString = out.toString();
    
                        //Do anything with response..
                        Log.d(TAG, responseString);
    
                    } else {
                        //Closes the connection.
                        response.getEntity().getContent().close();
                        throw new IOException(statusLine.getReasonPhrase());
                    }
                } catch (ClientProtocolException e) {
                    //TODO Handle problems..
                    Log.d(TAG, String.valueOf(e));
                } catch (IOException e) {
                    //TODO Handle problems..
                    Log.d(TAG, String.valueOf(e));
                }
                return responseString;
            }
    
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
    
                Log.e(TAG, result);
                try {
                    obj = new JSONObject(result);
                    stories = obj.getJSONArray("stories");
    
                    // initialize the items list
                    mItems = new ArrayList<ListViewItem>();
    
                    for (int i = 0; i < stories.length(); i++) {
    
                        JSONObject storyObj = stories.getJSONObject(i);
    
                        if (!storyObj.has("Advert")) {
    
                            newsStories newsStories = new newsStories();
    
                            newsStories.setTitle(storyObj.getString("subject"));
                            newsStories.setBody(storyObj.getString("body"));
    
                            mItems.add(new ListViewItem(newsStories.getTitle(), newsStories.getBody(), ""));
    
                        } else {
                            newsStories newsStories = new newsStories();
                            newsStories.setThumbnailUrl(storyObj.getString("Advert"));
                            mItems.add(new ListViewItem("", "", newsStories.getThumbnailUrl()));
    
                        }
    
                        // initialize and set the list adapter
                        //setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));
    
                    }
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
    
                //mProgressBar = (ProgressBar) getView().findViewById(R.id.progressBar);
                ListView mListView = (ListView) getView().findViewById(R.id.listView2); //Here is the issue
                //mTvEmpty = (TextView) getView().findViewById(R.id.textView);
    
                Log.d("mListView: ", String.valueOf(mListView));
    
                ArrayAdapter<ListViewItem> adapter = new ArrayAdapter<ListViewItem>(getActivity(), android.R.layout.simple_list_item_1, mItems);
    
                Log.d("Adapter: ", String.valueOf(adapter));
    
                // load your data to your mListView
                mListView.setAdapter(adapter); //NULL POINTER
            }
    
    
    
            public class newsStories {
                private String name, thumbnailUrl, body;
    
                public String getTitle() {
                    return name;
                }
    
                public void setTitle(String name) {
                    this.name = name;
                }
    
                public String getBody() {
                    return body;
                }
    
                public void setBody(String body) {
    
                    this.body = body.substring(0, 150);
    
                }
    
    
                public String getThumbnailUrl() {
                    return thumbnailUrl;
                }
    
                public void setThumbnailUrl(String thumbnailUrl) {
                   
                    this.thumbnailUrl = thumbnailUrl;
    
                }
    
            }
    
        }
    
        public class ListViewItem {
            public final String title;        // the text for the ListView item title
            public final String description;  // the text for the ListView item description
            public final String adUrl;
            //public final Drawable image;
    
            public ListViewItem(String title, String description, String Advert_Url) {
    
    
    
    
                if (Advert_Url != null && !Advert_Url.isEmpty()) {
    
                    String Advert = "http://www.myurl.co.uk/images/advert.png?width=700&height=200";
    
    
                    this.title = "";
                    this.description = "";
                    this.adUrl = Advert;
    
                } else {
                    this.title = title;
                    this.description = description;
                    this.adUrl = "";
                }
    
    
            }
        }
    
    
    }
    
    Code (markup):
     
    scottlpool2003, Jan 16, 2015 IP
  2. ThePHPMaster

    ThePHPMaster Well-Known Member

    Messages:
    737
    Likes Received:
    52
    Best Answers:
    33
    Trophy Points:
    150
    #2
    Before using findViewById the element needs to be in Activity (R.id.listView2) in this case. If you google "getView().findViewById" you can find many examples of that. I don't have my Java stack setup so I can't test this out.
     
    ThePHPMaster, Jan 17, 2015 IP
  3. scottlpool2003

    scottlpool2003 Well-Known Member

    Messages:
    1,708
    Likes Received:
    49
    Best Answers:
    9
    Trophy Points:
    150
    #3
    The problem is that I'm doing it Async so if I put it in the activity it tries to set the listview before the Async task has finished.
     
    scottlpool2003, Jan 19, 2015 IP