2

I am trying to fetching image links and texts from server which need to be added to a listview.

This is the result come from server:

 {"result":
[{"url":"http:\/\/website.com\/ImageUpload\/pic\/85.png"},
{"name":"Vikram Sharma"},
{"url":"http:\/\/website.com\/ImageUpload\/pic\/67.png"},
{"name":"Sudhir Sharma"}]
}

Reference : https://www.simplifiedcoding.net/android-upload-image-using-php-mysql-android-studio/

//ImageListView.java

 public class ImageListView extends AppCompatActivity implements AdapterView.OnItemClickListener {

private ListView listView;

public static final String GET_IMAGE_URL="http://website.com/ImageUpload/getAllImages.php";

public GetAlImages getAlImages;

public static final String BITMAP_ID = "BITMAP_ID";

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

    listView = (ListView) findViewById(R.id.listView);
    listView.setOnItemClickListener(this);
    getURLs();
}

private void getImages(){
    class GetImages extends AsyncTask<Void,Void,Void>{
        ProgressDialog loading;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(ImageListView.this,"Downloading images...","Please wait...",false,false);
        }

        @Override
        protected void onPostExecute(Void v) {
            super.onPostExecute(v);
            loading.dismiss();
            System.out.println("Zinda 1");
            //Toast.makeText(ImageListView.this,"Success",Toast.LENGTH_LONG).show();
            CustomList customList = new CustomList(ImageListView.this,GetAlImages.imageURLs,GetAlImages.name,GetAlImages.bitmaps);
            System.out.println("Zinda 2");
            listView.setAdapter(customList);
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                System.out.println("Zinda 3");
                getAlImages.getAllImages();
                System.out.println("Zinda 4");

            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    GetImages getImages = new GetImages();
    getImages.execute();
}

private void getURLs() {
    class GetURLs extends AsyncTask<String,Void,String>{
        ProgressDialog loading;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(ImageListView.this,"Loading...","Please Wait...",true,true);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            getAlImages = new GetAlImages(s);
            getImages();
        }

        @Override
        protected String doInBackground(String... strings) {
            BufferedReader bufferedReader = null;
            try {
                URL url = new URL(strings[0]);
                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;
            }
        }
    }
    GetURLs gu = new GetURLs();
    gu.execute(GET_IMAGE_URL);
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    Intent intent = new Intent(this, ViewFullImage.class);
    intent.putExtra(BITMAP_ID,i);
    startActivity(intent);
}
}

//CustomList.java

public class CustomList extends ArrayAdapter<String> {
    private String[] urls;
    private String[] name;
    private Bitmap[] bitmaps;
    private Activity context;
public CustomList(Activity context, String[] urls, String[] name,Bitmap[] bitmaps) {
    super(context, R.layout.image_list_view, urls);
    this.context = context;
    this.urls= urls;
    System.out.println("Singh 1");
    this.name= name;
    this.bitmaps= bitmaps;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View listViewItem = inflater.inflate(R.layout.image_list_view, null, true);
    TextView textViewURL = (TextView) listViewItem.findViewById(R.id.textViewURL);
    System.out.println("Singh 2");
    TextView textViewName = (TextView) listViewItem.findViewById(R.id.textViewName);
    System.out.println("Singh 3");
    ImageView image = (ImageView) listViewItem.findViewById(R.id.imageDownloaded);

    textViewURL.setText(urls[position]);
    System.out.println("Singh 4");
    textViewName.setText(name[position]);
    System.out.println("Singh 5");
    image.setImageBitmap(Bitmap.createScaledBitmap(bitmaps[position], 100, 50, false));
    System.out.println("Singh 6");
    return  listViewItem;
}
}

//GetAlImages.java

public class GetAlImages {

public static String[] imageURLs;
public static String[] name;
public static Bitmap[] bitmaps;

public static final String JSON_ARRAY="result";
public static final String NAME = "name";
public static final String IMAGE_URL = "url";
private String json;
private JSONArray urls;


public GetAlImages(String json){
    this.json = json;
    try {
        JSONObject jsonObject = new JSONObject(json);
        urls = jsonObject.getJSONArray(JSON_ARRAY);
    } catch (JSONException e) {
        System.out.println("Matru 1");
        e.printStackTrace();
    }
}

private Bitmap getImage(JSONObject jo){
    URL url = null;
   // String name =null;
    Bitmap image = null;
    try {
        url = new URL(jo.getString(IMAGE_URL));
       // name = new String(jo.getString(NAME));
        image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
    } catch (MalformedURLException e) {
        System.out.println("MAtru 2");
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("MAtru 3");
        e.printStackTrace();
    } catch (JSONException e) {
        System.out.println("Matru 4");
        e.printStackTrace();
    }
    return image;
}

public void getAllImages() throws JSONException {
    bitmaps = new Bitmap[urls.length()];

    imageURLs = new String[urls.length()];
    name = new String[urls.length()];

    for(int i=0;i<urls.length();i++){

        name[i] = urls.getJSONObject(i).getString(NAME);
        System.out.println("MAtru 5");

        imageURLs[i] = urls.getJSONObject(i).getString(IMAGE_URL);

        JSONObject jsonObject = urls.getJSONObject(i);
        System.out.println("MAtru 6");
        bitmaps[i]=getImage(jsonObject);
    }
}

}

//Logcat for error details

01-02 16:34:25.913 20237-20237/? I/Process: Sending signal. PID: 20237 SIG: 9
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime: FATAL EXCEPTION: main
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime: Process: com.package.name, PID: 20237
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime: java.lang.NullPointerException
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:589)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at com.package.listview.listview.CustomList.getView(CustomList.java:45)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.AbsListView.obtainView(AbsListView.java:2240)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.ListView.onMeasure(ListView.java:1175)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.View.measure(View.java:16558)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1923)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1120)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1302)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1007)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5677)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.Choreographer.doFrame(Choreographer.java:544)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:733)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5021)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
01-02 16:34:25.913 20237-20237/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
01-02 16:34:25.943 15342-15537/? I/ActivityManager: Process com.package.name (pid 20237) has died.
01-02 16:34:25.943 15342-15537/? W/ActivityManager: Force removing ActivityRecord{2e9ad3ac u0 com.package.name/com.package.listview.listview.ImageListView t15}: app died, no saved state
01-02 16:34:25.953 15342-15383/? W/InputDispatcher: channel '2ea211d8 com.package.name/com.package.listview.listview.ImageListView (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
01-02 16:34:25.953 15342-15383/? E/InputDispatcher: channel '2ea211d8 com.package.name/com.package.listview.listview.ImageListView (server)' ~ Channel is unrecoverably broken and will be disposed!
01-02 16:34:25.953 15342-15383/? W/InputDispatcher: channel '2e997ac0 com.package.name/com.package.name.Login (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
01-02 16:34:25.953 15342-15383/? E/InputDispatcher: channel '2e997ac0 com.package.name/com.package.name.Login (server)' ~ Channel is unrecoverably broken and will be disposed!
01-02 16:34:25.953 15342-15442/? W/InputDispatcher: Attempted to unregister already unregistered input channel '2ea211d8 com.package.name/com.package.listview.listview.ImageListView (server)'
01-02 16:34:25.953 15342-15509/? W/InputDispatcher: Attempted to unregister already unregistered input channel '2e997ac0 com.package.name/com.package.name.Login (server)'
e4c5
  • 48,268
  • 10
  • 82
  • 117
raj
  • 369
  • 5
  • 22
  • 1
    use `BaseAdapter` instead of `ArrayAdapter` – Ravi Jan 02 '16 at 12:05
  • @RRR , see I am new to android , can you some amendments in above code to work Please – raj Jan 02 '16 at 12:07
  • refer this http://stackoverflow.com/questions/16333754/how-to-customize-listview-using-baseadapter – Ravi Jan 02 '16 at 12:08
  • Change to `View listViewItem = inflater.inflate(R.layout.image_list_view, parent, true); ` – bGorle Jan 02 '16 at 12:08
  • @bGrole its still not working , please suggest something else – raj Jan 02 '16 at 12:14
  • @RRR see the url reference above i have mentioned , in that he already set imageurl and bitmap , i just added one more string name so it is giving error idk how to set name string in textview – raj Jan 02 '16 at 12:15
  • Please post your CustomList.java in full. There is a NullPointerException at line 45 and there are less lines than that in the code you posted – OneCricketeer Jan 02 '16 at 13:22

1 Answers1

0

the problem can be identified using the following line from your logcat

at com.package.listview.listview.CustomList.getView(CustomList.java:45)

This means that in your file CustomList.java on line 45 you may have used something that is not properly initialized or something that doesn't even exist yet

Fuseteam
  • 307
  • 2
  • 14
  • For suggestions or seeking clarifications, please leave a comment to the question. Its generally not a good idea to have answers that use "probably" and "suspect" words. – Wand Maker Jan 02 '16 at 14:12
  • This does not provide an answer to the question. To critique or request clarification from an author, leave a comment below their post - you can always comment on your own posts, and once you have sufficient [reputation](http://stackoverflow.com/help/whats-reputation) you will be able to [comment on any post](http://stackoverflow.com/help/privileges/comment). - [From Review](/review/low-quality-posts/10752643) – Wand Maker Jan 02 '16 at 14:12
  • @WandMaker I believe this is the answer I'm not asking for clarification nor do I have critique on the question. Since I do not know what he wrote on line 45 I can't say for sure but I'm 90% certain that he used something not properly initialized inhis code on line 45 of the file CustomList.java and that is causing the problem and yes I have not enough reputation to comment since people like to down vote my questions instead of providing critique or requesting clarifications if I could I would have commented first to be sure what is written in his code on line 45 of his file CustomList. Java – Fuseteam Jan 02 '16 at 14:37
  • It was part of "Low quality posts" queue I was reviewing, based on that I have left my feedback. I have not downvoted your answer though. Normally, I have seen experienced SO users seek clarifications in comments section and only when they are sure - they post it an answer – Wand Maker Jan 02 '16 at 14:58
  • @WandMaker yes I would've done that if I could sigh hopefully I can some rep back with this post if the asker is willing to try at least – Fuseteam Jan 02 '16 at 15:03