Android Webservis Konusunda Yardım
-
Arkadaşlar şimdi bir webservis hazırlayıp bunu android tarafında okuyacağım. Fakat verdiği hatayı bir türlü çözüme kavuşturamadım
Retrofit kullanıyorum bu arada
falancafilanca.com/webservis.asp?get_islem=listele tarayıcı üzerinde çalıştırınca
[{ "uye_ID":"4", "Ad":"Aziz", "Soyad":"NESİN", "Sehir":"İstanbul" },{ "uye_ID":"5", "Ad":"Cem", "Soyad":"YILMAZ", "Sehir":"Sivas" },{ "uye_ID":"6", "Ad":"Kadir", "Soyad":"İNANIR", "Sehir":"Ordu" }]
falancafilanca.com/webservis.asp?get_islem=getir tarayıcı üzerinde çalıştırınca
[{ "uye_ID":"5", "Ad":"Cem", "Soyad":"YILMAZ", "Sehir":"Sivas" }]
Şeklinde getiriyorum JSON verilerini. Bu adresi Android tarafında Retrofit ile çağırmak istediğimde
@GET("....webservis.asp") Call<uyeler> fnGet_Uyeler_Getir(@Query("get_islem") String get_islem); @GET("...webservis.asp") Call<List<uyeler>> fnGet_Uyeler_Listele(@Query("get_islem") String get_islem);
anasayfa activityde ise şu şekilde yapıyorum
Call<uyeler> call = apiInterface.fnGet_Uyeler_Getir("getir"); call.enqueue(new Callback<uyeler>() { @Override public void onResponse(Call<uyeler> call, Response<uyeler> response) { Log.d("basarili",response.code()+""); String strSonuc = ""; uyeler resource = response.body(); String strAd = resource.Ad; String strSoyad = resource.Soyad; strSonuc += strAd + " - " + strSoyad + "\n"; tvYazi.setText(strSonuc); } @Override public void onFailure(Call<uyeler> call, Throwable t) { call.cancel(); Log.d("basarisiz: ",t.toString()); } });
Şeklinde çalıştırdığımda
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
şeklinde hata vermektedir. Nete baktım bunu çözüme kavuşturamadım. Yardımlarınızı şimdiden bekliyorum.
-
Haci hatayi okudun mu?
Object bekliyorum array geliyor diyor. Json'u su sekilde dondur.
{
"result": [...]
}
-
Hocam, dediğin gibi çevirdim fakat bu sefer de hiç veri gelmiyor
https://api.myjson.com/bins/mvhxo
örnek json burada, 2 gündür kafayı yedirtecek bir türlü bulamadım. Android taraflı bir şey gözden mi kaçırıyorum bilemedim ki
-
Android'le ne alakasi olacak hocam. Json'u dogru decode/unmarshal edemiyorsundur kendi veri yapilarina. Gelen datayi yazdiriyor musun raw haliyle?
uyeler resource = response.body();
Burada response json array iken sen direkt tek bir uye objesine ceviriyorsun, resource.Ad filan diye erisiyorsun, array'e atayip resource[0].Ad gibi erismen lazim. Java'dan anlamadigim icin pseudo code soyle olabilir;
uyeler resource[] = response.body(); // uyeler'in kendisi zaten arrayse degistirmene gerek yok, erisirken hata yapiyorsundur.
String strAd = resource[0].Ad;Json'u eski haline getir (array donduren), gelen result'u dogru decode etmeyi arastir, javaci bir muhterem ornek kod gosterebilir.
AMpul tarafından 09/Ağu/18 16:36 tarihinde düzenlenmiştir -
Android'le alakalı değildir hocam kod paylaşsan daha rahat yardımcı olurdum ama büyük ihtimalle gelen raw veriyi doğru şekilde parse edemedin. Ben direk çalışan kod paylaşıyım sana incelersin.
public class MainActivity extends AppCompatActivity { Button btnHit; ProgressDialog pd; private String uyeId, ad, soyad, sehir; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnHit = (Button) findViewById(R.id.btn_hit); btnHit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new JsonTask().execute("https://api.myjson.com/bins/mvhxo"); } }); } private class JsonTask extends AsyncTask<String, String, String> { protected void onPreExecute() { super.onPreExecute(); pd = new ProgressDialog(MainActivity.this); pd.setMessage("Please wait"); pd.setCancelable(false); pd.show(); } protected String doInBackground(String... params) { HttpURLConnection connection = null; BufferedReader reader = null; try { URL url = new URL(params[0]); connection = (HttpURLConnection) url.openConnection(); connection.connect(); InputStream stream = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line+"\n"); Log.d("Response: ", "> " + line); //here u ll get whole response...... :-) } return buffer.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); try { JSONObject jsonObject = new JSONObject(result); uyeId = jsonObject.getJSONArray("uyeler").getJSONObject(0).getString("uye_ID"); ad = jsonObject.getJSONArray("uyeler").getJSONObject(0).getString("Ad"); soyad = jsonObject.getJSONArray("uyeler").getJSONObject(0).getString("Soyad"); sehir = jsonObject.getJSONArray("uyeler").getJSONObject(0).getString("Sehir"); } catch (JSONException e) { e.printStackTrace(); } if (pd.isShowing()){ pd.dismiss(); } } } }
-
Retrofit/Volley kullanma abi bence. Kendi kütüphaneni yazabilirsin Manyaki'nin attığı yöntem ile.
Çok daha güzel ürünler ortaya çıkar. Ben öyle yapmıştım hiç yoktan ogeldi de bu hata verdi uğraşma elinde JSON veri var parse et Class'ı oluştur. Biraz amelelik gerektiriyor o ameleliği de kütüphaneni güncelleyerek giderirsin zaten. Kolay gelsin.
-
MhmdAlmz bunu yazdı
Retrofit/Volley kullanma abi bence. Kendi kütüphaneni yazabilirsin Manyaki'nin attığı yöntem ile.
Çok daha güzel ürünler ortaya çıkar. Ben öyle yapmıştım hiç yoktan ogeldi de bu hata verdi uğraşma elinde JSON veri var parse et Class'ı oluştur. Biraz amelelik gerektiriyor o ameleliği de kütüphaneni güncelleyerek giderirsin zaten. Kolay gelsin.
Ya uygulama hali hazırda Manyaki'nin verdiği sistemle çalışıyor, ben biraz daha geliştirip hazır kütüphanelerle ilerlemek istiyorum.
-
ontedi bunu yazdıMhmdAlmz bunu yazdı
Retrofit/Volley kullanma abi bence. Kendi kütüphaneni yazabilirsin Manyaki'nin attığı yöntem ile.
Çok daha güzel ürünler ortaya çıkar. Ben öyle yapmıştım hiç yoktan ogeldi de bu hata verdi uğraşma elinde JSON veri var parse et Class'ı oluştur. Biraz amelelik gerektiriyor o ameleliği de kütüphaneni güncelleyerek giderirsin zaten. Kolay gelsin.
Ya uygulama hali hazırda Manyaki'nin verdiği sistemle çalışıyor, ben biraz daha geliştirip hazır kütüphanelerle ilerlemek istiyorum.
Ben yazdığım bütün android uygulamalarını bu şekilde yazdım bir sıkıntısı da yok. Kütüphanemi oluşturdum çatır çatır geliştiriyorumyok hataymış bilmem neymiş uğraşmıyorum.
-
MhmdAlmz bunu yazdıontedi bunu yazdıMhmdAlmz bunu yazdı
Retrofit/Volley kullanma abi bence. Kendi kütüphaneni yazabilirsin Manyaki'nin attığı yöntem ile.
Çok daha güzel ürünler ortaya çıkar. Ben öyle yapmıştım hiç yoktan ogeldi de bu hata verdi uğraşma elinde JSON veri var parse et Class'ı oluştur. Biraz amelelik gerektiriyor o ameleliği de kütüphaneni güncelleyerek giderirsin zaten. Kolay gelsin.
Ya uygulama hali hazırda Manyaki'nin verdiği sistemle çalışıyor, ben biraz daha geliştirip hazır kütüphanelerle ilerlemek istiyorum.
Ben yazdığım bütün android uygulamalarını bu şekilde yazdım bir sıkıntısı da yok. Kütüphanemi oluşturdum çatır çatır geliştiriyorumyok hataymış bilmem neymiş uğraşmıyorum.
La burda hata parsingden sanki retrofitten aq işkembeden atiyon..
-
SUPERBICO bunu yazdıMhmdAlmz bunu yazdıontedi bunu yazdıMhmdAlmz bunu yazdı
Retrofit/Volley kullanma abi bence. Kendi kütüphaneni yazabilirsin Manyaki'nin attığı yöntem ile.
Çok daha güzel ürünler ortaya çıkar. Ben öyle yapmıştım hiç yoktan ogeldi de bu hata verdi uğraşma elinde JSON veri var parse et Class'ı oluştur. Biraz amelelik gerektiriyor o ameleliği de kütüphaneni güncelleyerek giderirsin zaten. Kolay gelsin.
Ya uygulama hali hazırda Manyaki'nin verdiği sistemle çalışıyor, ben biraz daha geliştirip hazır kütüphanelerle ilerlemek istiyorum.
Ben yazdığım bütün android uygulamalarını bu şekilde yazdım bir sıkıntısı da yok. Kütüphanemi oluşturdum çatır çatır geliştiriyorumyok hataymış bilmem neymiş uğraşmıyorum.
La burda hata parsingden sanki retrofitten aq işkembeden atiyon..
Retrofitten demedim ki zaten hocam hatayı :D Hatanın sebebi zaten belli ben Kendisi Parse etsin kendisi classı oluştursun diye diyorum.. Kütüphanenin ona sunduğunun dışına çıkabilecek mi ?
-
MhmdAlmz bunu yazdıSUPERBICO bunu yazdıMhmdAlmz bunu yazdıontedi bunu yazdıMhmdAlmz bunu yazdı
Retrofit/Volley kullanma abi bence. Kendi kütüphaneni yazabilirsin Manyaki'nin attığı yöntem ile.
Çok daha güzel ürünler ortaya çıkar. Ben öyle yapmıştım hiç yoktan ogeldi de bu hata verdi uğraşma elinde JSON veri var parse et Class'ı oluştur. Biraz amelelik gerektiriyor o ameleliği de kütüphaneni güncelleyerek giderirsin zaten. Kolay gelsin.
Ya uygulama hali hazırda Manyaki'nin verdiği sistemle çalışıyor, ben biraz daha geliştirip hazır kütüphanelerle ilerlemek istiyorum.
Ben yazdığım bütün android uygulamalarını bu şekilde yazdım bir sıkıntısı da yok. Kütüphanemi oluşturdum çatır çatır geliştiriyorumyok hataymış bilmem neymiş uğraşmıyorum.
La burda hata parsingden sanki retrofitten aq işkembeden atiyon..
Retrofitten demedim ki zaten hocam hatayı :D Hatanın sebebi zaten belli ben Kendisi Parse etsin kendisi classı oluştursun diye diyorum.. Kütüphanenin ona sunduğunun dışına çıkabilecek mi ?
Network kutuphanesinden at kosturmasını beklemezsen zaten dışına çıkmana gerek yok. Google dokumanlarda bile retrofit kullanıyor gerektigi yerlerde.
Kütüphaneni asynctask kullanarak yazdıgını varsayıyorum(ion, fastandroidnetworking gibi)
Ki Callback Interface , cache falan filan var daha