Android JSON Parse

Haber sitesinden veri cekmek istiyorum. App calisdirdikda onPostExecute() methodundaki toast calisiyor. Hata nerde bulamiyorum

 

 

 

package com.example.xeberapp;

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

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.support.v7.app.ActionBarActivity;
import android.app.ProgressDialog;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends ActionBarActivity {
    
    
    
    ArrayList<Xeberler> xeberlerList;
    ListView listview;
    XeberAdapter adapter;

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

        
        xeberlerList = new ArrayList<Xeberler>();
        new JSONAsyncTask().execute("http://qafqazinfo.az/api.php");
        
        listview = (ListView)findViewById(R.id.listView1);
        adapter = new XeberAdapter(getApplicationContext(), R.layout.xeberler, xeberlerList);
        
        listview.setAdapter(adapter);
        
        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
                
                Toast.makeText(getApplicationContext(), xeberlerList.get(position).getP_title(), Toast.LENGTH_LONG).show();                
            }
        });
        
        
    }


     
    class JSONAsyncTask extends AsyncTask<String, String, Boolean> {
        
        ProgressDialog dialog;
        
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setMessage("Loading, please wait");
            dialog.setTitle("Connecting server");
            dialog.show();
            dialog.setCancelable(false);
        }
        
        @Override
        protected Boolean doInBackground(String... urls) {
            
            
            
            try {
                
                //------------------>>
                HttpGet httpGet = new HttpGet(urls[0]);
                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response = httpclient.execute(httpGet);

                // StatusLine stat = response.getStatusLine();
                int status = response.getStatusLine().getStatusCode();

                if (status == 200) {
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);
                    
                
                    JSONObject jsono = new JSONObject(data);
                    JSONArray jarray = jsono.getJSONArray("api_adi");
                    
                    for (int i = 0; i < jarray.length(); i++) {
                        JSONObject object = jarray.getJSONObject(i);
                    
                        Xeberler xeber = new Xeberler();
                        
                        xeber.setP_image(object.getString("image"));
                        xeber.setP_title(object.getString("title"));
                        xeber.setP_title_sonluq(object.getString("title_sonluq"));
                        xeber.setP_detail(object.getString("detail"));
                        
                        
                        xeberlerList.add(xeber);
                    }
                    return true;
                }
                
                //------------------>>
                
            } catch (ParseException e1) {
                e1.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return false;
        }
        
        protected void onPostExecute(Boolean result) {
            dialog.cancel();
            adapter.notifyDataSetChanged();
            if(result == false){
                Toast.makeText(getApplicationContext(), "Serverden veri getirilemedi", Toast.LENGTH_LONG).show();
            }
        }
    }
    
    
}

 

 

 

 

public class XeberAdapter extends ArrayAdapter<Xeberler> {

    ArrayList<Xeberler> xeberlerList;
    LayoutInflater vi;
    int Resource;
    //Context context;
    ViewHolder holder;

    
    
    

    public XeberAdapter(Context context, int resource, ArrayList<Xeberler> objects) {
        super(context, resource, objects);
        vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        Resource = resource;
        xeberlerList = objects;
        //this.context = context;
    }
 
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // convert view = design
        View v = convertView;
        if (v == null) {
            holder = new ViewHolder();
            v = vi.inflate(Resource, null);
            holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
            holder.xeberBasliq = (TextView) v.findViewById(R.id.titleBasliq);
            holder.xeberSonluq = (TextView) v.findViewById(R.id.titleSonluq);
            holder.xeberMelumat = (TextView) v.findViewById(R.id.detail);
             
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        holder.imageview.setImageResource(R.drawable.ic_launcher);
        new DownloadImageTask(holder.imageview).execute(xeberlerList.get(position).getP_image());
        holder.xeberBasliq.setText(xeberlerList.get(position).getP_title());
        holder.xeberSonluq.setText(xeberlerList.get(position).getP_title_sonluq());
        holder.xeberMelumat.setText(xeberlerList.get(position).getP_detail());
        return v;

    }

    static class ViewHolder {
        public ImageView imageview;
        public TextView xeberBasliq;
        public TextView xeberSonluq;
        public TextView xeberMelumat;

    }
    

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
                System.out.println(e);
            }
            return mIcon11;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }

    }
    
    
}

 

 

public class Xeberler {

    private String p_image;
    private String p_title;
    private String p_title_sonluq;
    private String p_detail;
    
    public Xeberler(){
        
    }
    
    
    

    public Xeberler(String p_image, String p_title, String p_title_sonluq, String p_detail) {
        super();
        this.p_image = p_image;
        this.p_title = p_title;
        this.p_title_sonluq = p_title_sonluq;
        this.p_detail = p_detail;
    }

 


    public String getP_title_sonluq() {
        return p_title_sonluq;
    }

    public void setP_title_sonluq(String p_title_sonluq) {
        this.p_title_sonluq = p_title_sonluq;
    }

    public String getP_image() {
        return p_image;
    }

    public void setP_image(String p_image) {
        this.p_image = p_image;
    }

    public String getP_title() {
        return p_title;
    }

    public void setP_title(String p_title) {
        this.p_title = p_title;
    }

    public String getP_detail() {
        return p_detail;
    }

    public void setP_detail(String p_detail) {
        this.p_detail = p_detail;
    }
}

 

 

    0

    Nursultan

    BP - 02 Kasım 2014

    o sorunu hallettim ama sonuc yine ayni

      ahmtbrk

      7, 02/11/2014 - 09:47
      doInBackground içerisindeki e.printstracktrace()'ler ne veriyor resim koyabilir misin?

    0

    Adem Koç

    01 Kasım 2014

    json verilerindeki 4. haberin detail kısmında çift tırnaklardan kaynaklı sıkıntı var. "Folksvaqen Polo" kısmı

    0

    Nursultan

    BP - 01 Kasım 2014

    MainActivity.java

    
    
    
    	ArrayList<Xeberler> xeberlerList;
    	  ListView listview;
    	 XeberAdapter adapter;
    
    
    	 @Override
    	 protected void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
    	  setContentView(R.layout.activity_main);
    
    
    	  
    	  xeberlerList = new ArrayList<Xeberler>();
    	  new JSONAsyncTask().execute("http://localhost/android/api.php");
    	  
    	   listview = (ListView)findViewById(R.id.listView1);
    	  adapter = new XeberAdapter(getApplicationContext(), R.layout.xeberler, xeberlerList);
    	  
    	  listview.setAdapter(adapter);
    	  
    	  listview.setOnItemClickListener(new OnItemClickListener() {
    
    
    	   @Override
    	   public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
    	    
    	    Toast.makeText(getApplicationContext(), xeberlerList.get(position).getP_title(), Toast.LENGTH_LONG).show();    
    	   }
    	  });
    	  
    	  
    	 }
    
    
    	
    	  
    	 class JSONAsyncTask extends AsyncTask<String, String, Boolean> {
    	  
    	  ProgressDialog dialog;
    	  
    	  @Override
    	  protected void onPreExecute() {
    	   super.onPreExecute();
    	   dialog = new ProgressDialog(MainActivity.this);
    	   dialog.setMessage("Loading, please wait");
    	   dialog.setTitle("Connecting server");
    	   dialog.show();
    	   dialog.setCancelable(false);
    	  }
    	  
    	  @Override
    	  protected Boolean doInBackground(String... urls) {
    	   
    	   
    	   
    	   try {
    	    
    	    //------------------>>
    	    HttpGet httpGet = new HttpGet(urls[0]);
    	    HttpClient httpclient = new DefaultHttpClient();
    	    HttpResponse response = httpclient.execute(httpGet);
    
    
    	    // StatusLine stat = response.getStatusLine();
    	    int status = response.getStatusLine().getStatusCode();
    
    
    	    if (status == 200) {
    	     HttpEntity entity = response.getEntity();
    	     String data = EntityUtils.toString(entity);
    	     
    	    
    	     JSONObject jsono = new JSONObject(data);
    	     JSONArray jarray = jsono.getJSONArray("xeberler");
    	     
    	     for (int i = 0; i < jarray.length(); i++) {
    	      JSONObject object = jarray.getJSONObject(i);
    	     
    	      Xeberler xeber = new Xeberler();
    	      
    	      xeber.setP_image(object.getString("image"));
    	      xeber.setP_title(object.getString("title"));
    	      xeber.setP_title_sonluq(object.getString("title_sonluq"));
    	      xeber.setP_detail(object.getString("detail"));
    	      
    	      
    	      xeberlerList.add(xeber);
    	      
    	     
    	     }
    	     
    	     return true;
    	    }
    	    
    	    
    	    //------------------>>
    	    
    	   } catch (ParseException e1) {
    	    e1.printStackTrace();
    	   } catch (IOException e) {
    	    e.printStackTrace();
    	   } catch (JSONException e) {
    	    e.printStackTrace();
    	   }
    	   return false;
    	  }
    	  
    	  protected void onPostExecute(Boolean result) {
    	   dialog.cancel();
    	   adapter.notifyDataSetChanged();
    	   if(result == false){
    	    Toast.makeText(getApplicationContext(), "Serverden veri getirilemedi", Toast.LENGTH_LONG).show();
    	   }/*else{
    	    
    	     adapter = new XeberAdapter(getApplicationContext(), R.layout.xeberler, xeberlerList);
    	     listview.setAdapter(adapter);
    	   }*/
    	  }
    	 }
    	 
    	}
    
    
    	

    XeberAdapter.java

    
    
    
    	public class XeberAdapter extends ArrayAdapter<Xeberler> {
    	 
    	 ArrayList<Xeberler> xeberlerList;
    	 LayoutInflater inflater;
    	 int Resource;
    	 Context context;
    	 ViewHolder holder;
    
    
    	 
    	 
    	 
    
    
    	 public XeberAdapter(Context context, int resource, ArrayList<Xeberler> objects) {
    	  super(context, resource, objects);
    	  inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    	  Resource = resource;
    	  xeberlerList = objects;
    	  //this.context = context;
    	 }
    	
    	 
    	 @Override
    	 public View getView(int position, View convertView, ViewGroup parent) {
    	  // convert view = design
    	  View v = convertView;
    	  if (v == null) {
    	   holder = new ViewHolder();
    	   v = inflater.inflate(Resource, null);
    	   holder.imageview = (ImageView) v.findViewById(R.id.imagev);
    	   holder.xeberBasliq = (TextView) v.findViewById(R.id.titleBasliq);
    	   holder.xeberSonluq = (TextView) v.findViewById(R.id.titleSonluq);
    	   holder.xeberMelumat = (TextView) v.findViewById(R.id.detail);
    	   
    	   v.setTag(holder);
    	  } else {
    	   holder = (ViewHolder) v.getTag();
    	  }
    	  //holder.imageview.setImageResource(R.drawable.ic_launcher);
    	  new DownloadImageTask(holder.imageview).execute(xeberlerList.get(position).getP_image());
    	  holder.xeberBasliq.setText(xeberlerList.get(position).getP_title());
    	  holder.xeberSonluq.setText(xeberlerList.get(position).getP_title_sonluq());
    	  holder.xeberMelumat.setText(xeberlerList.get(position).getP_detail());
    	  return v;
    
    
    	 }
    
    
    	 static class ViewHolder {
    	  public ImageView imageview;
    	  public TextView xeberBasliq;
    	  public TextView xeberSonluq;
    	  public TextView xeberMelumat;
    
    
    	 }
    	 
    
    
    	 private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    	  ImageView bmImage;
    
    
    	  public DownloadImageTask(ImageView bmImage) {
    	   this.bmImage = bmImage;
    	  }
    
    
    	  protected Bitmap doInBackground(String... urls) {
    	   String urldisplay = urls[0];
    	   Bitmap mIcon11 = null;
    	   try {
    	    InputStream in = new java.net.URL(urldisplay).openStream();
    	    mIcon11 = BitmapFactory.decodeStream(in);
    	   } catch (Exception e) {
    	    Log.e("Error", e.getMessage());
    	    e.printStackTrace();
    	    System.out.println(e);
    	   }
    	   return mIcon11;
    	  }
    
    
    	  protected void onPostExecute(Bitmap result) {
    	   bmImage.setImageBitmap(result);
    	  }
    
    
    	 }
    	  
    	}
    
    
    	

    JSON

    {
    
    
    	xeberler:
    	[
    
    
    	{
    
    
    	image:"http://cdn.qafqazinfo.az/82398.jpg",
    	title:"Dünyanın ən nazik smartfonu",
    	title_sonluq:null,
    	detail:"Qafqazinfo” azərtac-a istinadən xəbər verir ki, “Vivo” smartfonu Yer kürəsində ən nazik qacetlərdən biri olan “iPhone 5s” smartfonundan 2 dəfə nazik olacaq. Bu yaxınlarda buraxılmış “iPhone 6” smartfonunun qalınlığı 6,9 millimetrdir.Hazırda birincilik “Gionee” şirkətinin buraxdığı “Elife S5.1” smartfonundadır. Onun qalınlığı, adından göründüyü kimi, 5,1 millimetrdir ki, bu da Ginnesin Rekordlar kitabında qeydə alınıb.“Letnews” portalı yazır ki, Çinin yeni məhsulunun texniki xüsusiyyətləri hələlik bəyan edilmir, yalnız batareya ekspertlərdə şübhə doğurur"
    
    
    	},
    	{
    
    
    	image:"http://cdn.qafqazinfo.az/82397.jpg",
    	title:"Çəkdiyi dişlərdən ehram düzəldən gəncəli həkim",
    	title_sonluq:"Fotolar",
    	detail:"Qafqazinfo”nun virtualaz.org-a istinadən məlumatına görə, ilk baxışdan adama elə gəlir ki, həkimin fiqurlar düzəldib üzünü də dişlərlə bəzəməyə həvəsi var. Lakin həkim minlərlə dişi analiz aparmaq üçün toplayıb: “Diş üçün dərman bitkiləri mövzusunda elmi işim olub. Hər bir həkim işlədiyi ərazidəki insanların xarakterik xüsusiyyətlərini, xəstəliklərini öyrənməlidir. Məsələn, niyə görə Gəncə ərazisində yaşayan sakinlərdə dişlər çənə sümüyünə yapışır? Kariesə daha çox tutulur?İşləməyə başlayandan sonra gördüm ki, dişlər çənə sümüyünə yapışmağa meyllidir. Başladım dişləri analiz etməyə. Çəkdiyim bütün dişləri topladım. Minlərlə diş topladım. Elmi tədqiqat apardım. Kitab da yazdım. Nəticələrə görə, Qərb bölgəsində dişlər çənə sümüyünə yapışırsa, Şimal zonasında laxlayıb düşür”.Zakir Cəfərov deyir minlərlə dişi toplayıb tədqiqat apardıqdan sonra düşünüb ki, onları atmasın. Bu səbəbdən dişlərdən fiqurlar düzəldib.Hər bir atılmış dişin infeksiyalardan, xəstəlikdən azad olub istifadə olunma mərhələsinə gəlməsi 1 il vaxt çəkib. Həkim deyir ki, bunun üçün dişlər xüsusi məhlullarda bir neçə mərhələ üzrə saxlanıb: “Dişləri toplayandan sonra mən başladım bunlardan fiqurlar düzəltməyə. Eyfel qülləsi, şahmat, Misir piramidaları formasında fiqurlar düzəltdim. Dişləri də üzərinə yapışdırmışam. Bu həm xəstələr üçün maraqlı olur, həm də itməməsi üçün saxlayırıq”.Gəncəli həkim elmi araşdırmasının nəticəsi olaraq yazdığı kitabda hər bir bölgənin xarakterik diş xəstəliklərinə toxunub. Üstəlik çıxış yollarını və müalicə üsullarını da araşdırıb: “Burada irsi faktorlar da var. Ərazinin suyu, qidalanma faktoru da var. Gəncədə olan minerallar digər bölgələrə nisbətən çoxdur. Burada müalicəsini də göstərmişik. Dərman, bitki yağları və sair - onları da misal göstərmişik. Xəstələrə masajlar təyin edirik”.Stomatoloq xəstələrinin dişlərini toplamağa davam edəcəyini deyir. İndi daha böyük ideya üçün...Zakir Cəfərov bir arzusunu reallaşdırmaq istəyir. O, diş formasında stomatoloji kabinet tikmək arzusundadır. Binanın fasadını isə dişlərlə bəzəməyi planlaşdırır: “Gələcək üçün böyük bir planımız var. Dişlərdən diş fiqurunda bir ev tikək. Birinci mərtəbə stomatoloji klinika kimi fəaliyyət göstərsin. Evin üzünü də həmin bu dişlərdən bəzəyək. Fasad şəklində. Bu da Gəncənin şöhrəti üçün önəmlidir. Dünyanın heç yerində dişə bənzər ev yoxdur. Layihənin üzərində işləyirəm, 1 milyona yaxın diş toplamalıyam.."
    
    
    	},
    	{
    
    
    	image:"http://cdn.qafqazinfo.az/78968.jpg",
    	title:"Facebook”un gündəlik mobil auditoriyası",
    	title_sonluq:"700 milyon ",
    	detail:"“Qafqazinfo” ICTnews-a istinadən xəbər verir ki, gündəlik aktiv auditoriya sayı istifadəçilərin cəlb olunmasını əks etdirir. Bu, “Facebook”un reklam biznesi üçün mühüm parametrdir. Hər gün mobil qurğulardan “Facebook” şəbəkəsinə daxil olan istifadəçilərin sayı, demək olar, xidmətin gündəlik aktiv auditoriyasına bərabərdir. Bu, bir ildə sosial şəbəkənin gəlirində mobil reklamın payının 40-dan 66%-dək artmasını qismən izah edir.Sosial şəbəkədən, heç olmasa, ayda bir dəfə 1,35 milyard insan istifadə edir. Son üç ayda “Facebook”un auditoriyası 30 milyon istifadəçi artıb. “Facebook” istifadəçilərinin sayının artım tempi azalır: son üç rübdə sosial şəbəkəyə 40-50 milyon yeni istifadəçi qoşulub. Hər ay 1,12 milyard insan sosial şəbəkənin mobil xidmətlərindən istifadə edir ki, bu da ötən illə müqayisədə 33% yüksəkdir.Ümumi göstəricilərlə müqayisədə mobil auditoriyanın aktiv artması şirkətin işinə yarayır. “Facebook”un baş direktoru Mark Zukerberq mobil texnologiyaların inkişafını sosial şəbəkənin əsas prioriteti adlandırır. “Facebook” şirkəti, həmçinin “WhatsApp” və “Instagram” xidmətlərinə sahibdir. )"
    
    
    	},
    	{
    
    
    	image:"http://cdn.qafqazinfo.az/82395.jpg",
    	title:"Azərbaycanlı yeniyetmə yol polisini vurdu",
    	title_sonluq:null,
    	detail:"Qafqazinfo” anspress-ə istinadən xəbər verir ki, ərazidə olan yol polisi "Folksvaqen Polo" markalı maşına yaxınlaşaraq sürücüdən sənədlərini tələb edib. Bu zaman gənc oğlan sənədləri axtarmağa başlayıb. Lakin qəfildən o avtomobili geri doğru hərəkət etdirib və iki dəfə polis müstəntiqini vurub. Nəticədə polis yerə yıxılıb. Dərhal ayağa qalxan polis zədələnməsinə baxmayaraq avtomobillə qaçan gənci izləməyə başlayıb.Gənc sürücü qəza törətdiyindən, polis onu qısa vaxtda saxlaya bilib. Nəticədə bəlli olub ki, maşını idarə edən 17 yaşlı Seymur Rzayev olub. Saxlanılan Seymur vəsiqəsi olmadan avtomobil idarə etdiyini və bunun ilk olmadığını deyib. “Mən qardaşıma çox bənzəyirəm. Adətən onun vəsiqəsi ilə maşın sürürəm”.Polis idarəsinə gətirilən gənclə bağlı araşdırma başlayıb"
    
    
    	}
    
    
    	]
    
    
    	}

    0

    Ahmet Burak Demirkoparan

    31 Ekim 2014

    doInBackground içerisinde json parse ederken bi parametre vs yanlış ise orada jsonrray oluşmuyor exceptiona atıyor o yüzden false dönüyor.müdahale etmen gereken yer orası.

     

      nursultan

      Cmt, 01/11/2014 - 13:52
      inceliyorum her sey dogru gibi gorunuyor. yine bulamadim nerde hata yapdigimi :(

      baranbuyuk

      Cum, 07/11/2014 - 15:23
      Logcat'te çıkan hatayı paylaşmazsan, nasıl bir hata olduğunu bilemeyiz. Logcat lütfen..
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.