[]

Android Uygulamalar İçin Web Servis olarak Laravel Kullanışlımıdır ?

Merhaba ben bir twitter clonu yapmaya çalışıyorum.
WebServis OLarak php ve mysql kullanıyorum.
Fakat android den post ile gelen verimim sql sorgusunda parametre olarak kullanamadım.

misal

$id = $_POST["id"];

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='.$id.'");
$statement->execute();
$array = $statement->fetchAll(PDO::FETCH_ASSOC);
//$json = json_encode($array);
$result["employees"] = $array;
echo json_encode($result);

yukarıda ki gibi post ile gelen veriyi sql sorgusunda kullanamıyorum boş görünüyor.

BEnde laravel ile webservisimi yazmayı düşünüyorum fakat laravel öğrenmeye başlamadan laravel bu iş için uygunmudur bilen developerlara danışmak istedim.

Teşekkürler.

 
boş gelen nedir, $id mi boş geliyor? satır satır debug ettiniz mi nerede problem var diye.

önce $id'ye bakın, sonra sorguya.
  • aziz dostum jack  (04.11.19 16:41:34 ~ 16:42:06) 
Merhaba @aziz dostum jack
Sorunu bulamadım.

aşağıda php dosyamı paylaşıyorum.
post ile id webservisime geliyor sonra veritabanına gönderiyorum kayıt oluyor.
Yani id geliyor ve dolu.
Sonra id ile sql sorgusu yapıyorum fakat boş görünüyor.

2 gündür uğraşıyorum fakat çözüm bulamadım.

sorguda hata yok çünkü aşağıdaki gibi id bilgisini girdiğimde json çıktısı alabiliyorum.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='529'");

Yardımcı olursan çok sevinirim. stackoverflow da da sordum cevap alamadım.


github.com
  • aristotelesin berberi  (04.11.19 16:52:37) 
elinle id yazınca geliyorsa,

$id = $_POST["id"];

bu satırda problem vardır, android'den post method ile çağırdığına emin misin?

android'den bu servisi nasıl çağırdığını gösterirsen ona bakalım.
  • aziz dostum jack  (04.11.19 16:56:52 ~ 17:00:06) 
if($id != ""){
$sql = "INSERT INTO tablethree (name, twitid )
VALUES ('$extra', '$id')" ;
// use exec() because no results are returned
$conn->exec($sql);

}
@aziz dostum jack

Yukarıda kod ile, gelen id bilgisini veritabanıma kayıt ediyorum.
Bu kayıt işlemi verinin geldiğini kanıtlıyor.

Sonra aynı id bilgisi ile sql sorgusu yaptığımda boş görünüyor.
  • aristotelesin berberi  (04.11.19 17:01:38) 
o zaman select yaptığın yeri parametreli olarak dene,


$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid =:id");
$statement->execute(['id' => $id]);
$array = $statement->fetchAll(PDO::FETCH_ASSOC);
  • aziz dostum jack  (04.11.19 17:04:55) 
@aziz dostum jack
Heyecanlandım olur mu diye ama yine boş çıktı.

{"employees":[]}

Php post ile gelen veiriyi get ile gönderemiyor mu ?

Aşağıdaki gibi yaptığımda json çıktısı elde edebiliyorum.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='529'");
  • aristotelesin berberi  (04.11.19 17:15:53) 
gelen ve sonuç (gönderilen) birbirinden bağımsız post'la veya get ile data göndermenin sonuca etkisi yok.

burada problem şu ki $id geldiğine eminim diyorsun fakat o $id'yi select'e sokunca çalışmıyor diyorsun.

o zaman $id ile gelen veride problem var. gördüğüm kadarıyla veritabanınd id kolonu varchar tutuyorsun herhalde, belki sonunda bir boşluk filan vardır senin göremediğin.

insert ettiğinde de çalışıyordur ama boşluk olup olmadığını göremiyorsundur.

bunu anlayabilmek için,

$id = 529 deyip bir önceki cevabımda verdiğim sorgunun çalışıp çalışmadığını kontrol edebilirsin.

eğer çalışıyorsa $_post ile gelen veride problem var demektir.


ya da insert ettiğin tabloya gidip bak bakalım son eklenen twitid'nin sonunda veya başında herhangi bir boşluk var mı?
  • aziz dostum jack  (04.11.19 17:24:56 ~ 17:25:49) 
@aziz dostum jack


post ile gelen id string türünde , bu verinin kayıt olduğu sütun integer o yüzden bende gelen veriyi integere çevirdim veritabanına kayıt oldu fakat sql sorgum yine boş geldi.

$sayi = (int) $id;
YUkarıdaki şekilde integer yaptım ve id olan yerleri sayi değişkenimle değiştirdim.

ikinci söylediğini gelelim

dediğin şeyi daha önce yaptığımı söylemiştim.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='529'");
yukarıdaki şekilde sql sorgum çalışıyor ve json çıktısı alabiliyorum.


Peki aşağıdaki sql sorgusu neden çalışmıyor.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='.$id.'");


1 neden id değişkeni boş olabilir.

cevap: id değişkeni boş değil çünkü veri tabanına kayıt oluyor ama sql sorgusunda işlevsiz oluyor.

2. Neden sql sorgusu hatalı olabilir.

Cevap bunu test etmek için WHERE twitid ='529' yaptığımnda sorgu çalışıyor ve json çıktısı alınabiliyor.

3. Neden gelen id eğer string ise ve kayıt olduğu tablo da integer ise veri gelmeyebilir.

Cevap gelen string türündeki id değişkenini integer çevirim denedim fakat durum değişmedi.


Şİmdi soruyorum başka neden varmı ?
  • aristotelesin berberi  (04.11.19 18:12:58) 
bir kere şimdi farkettim senin o kullandığın sql sorgusundaki nokta ile string toplama olayı zaten yanlış,

noktasız kullanman gerekiyor, noktalı kullandığında sorgu stringi şu hale geliyor,
imgbbb.com

bir de bu olay sql injection'a açık böyle kullanma, benim dediğimi kullan.

ya da ikinci yöntem,

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid = :id");
$statement->bindParam( ":id", $id, PDO::PARAM_INT);
$statement->execute();
$array = $statement->fetchAll(PDO::FETCH_ASSOC);

diğer söylediklerin doğru evet bu dünyanın en stadart yapısı, veri alıp, sorgu çekme, mutlaka bir yerlerde bizim de göremediğimiz bir hata yapıyorsundur.
  • aziz dostum jack  (04.11.19 20:19:47 ~ 20:25:12) 
sandbox.onlinephpfunctions.com

bir tane de örnek hazırladım. execute diyerek sonuçları görebilirsin.
  • aziz dostum jack  (04.11.19 20:34:25) 
@aziz dostum jack aziz dostum sorunu buldum sql sorgusunda değil hata android tarafında şöyleki;
ben android de veri gönderiyorum fakat çekmeyi başka aktivitiy de yapıyorum fakat böyle olmamalı çünkü benim çekeceğim veri göndereceğim veri ile çekilcek o yüzden ben veri gönderdiğimde dönen cevabı aynı anda almalıyım.

bunu da çöyle fark ettim html form oluşturum veri gönderdim sonra sql sorgusu yaptım oldu alıp vermenin aynı anda olması gerektiğini de bunu yapınca fark ettim. Şimdi çok yordum kendimi ama yarın yapacağım.

Yardımların için çok teşekkür ediyorum sanada zahmet verdim.
beni twitterdan takip et lütfen iyi akşamlar.
twitter @mezbjen
  • aristotelesin berberi  (04.11.19 21:22:06) 
[]

Post ile Android den gelen değişken Sql sorgusunda nasıl kullanılır ? php

Merhaba lütfen yardım edin sorunu çözemiyorum. !!

Android den veri gönderiyorum webservisime,
sonra web servisime gelen veriler ile 2 tane işlem yapmak istiyorum.

1.İşlem gelen veriyi mysql veri tabanıma kaydetmek.

2. İşlem gelen veri ile veri çekmek ve json olarak almak.

birinci işlem de sorun yok veriler veri tabanıma kaydediliyor.

ikinci işlem de sorun var null oluyor.

github.com

Kodlarım yukarı veriyorum.

Sorun android tarafında değil çünkü veri geliyor ve veri tabanına kayıt oluyor.
Fakat ben



$ extra = $ _POST [ " txtkim " ];
$ id = $ _POST [ " id " ];

"$ id " bu değişkenimi kullanmak istediğimde boş görünüyor ve boş değil anlayamadım cevaplarsanız çok sevinirim 4 saat dir uğraşıyorum fakat düzeltemedim.

bu soruna benzer bir paylaşım buldum fakat cevap verilememiş.

www.sitepoint.com

 
16. satıra

var_dump($_POST["id"]);

yazınca ne geliyor, ayrıca değişkenler niye tırnak içinde

$_SESSION['extra'] = '$extra';

burda $extra değişkeninin değeri değil direk "$extra" olduğu gibi atanıyor değişkene
  • nahtoderfahrung  (02.11.19 20:29:18) 
Merhaba @nahtoderfahrung cevabın için teşekkür ediyorum. Fakat önerilerini denememe rağmen sorun devam etmekte.
Başka bir çözüm yolu biliyormusun ?

var_dump kontrolünü önerin üzerine aşağıdaki gibi denedim fakat null oldu.

$results["employeess"] = var_dump($id);

Session da tırnak hatamı düzelttim cevap aşağıdaki gibi.

{"employeesextra":null}{"employees":[]}

Sorun devam ediyor.

Birde sorun sql sorgusunda değil bunu şöyle kanıtlayabiliyorum.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='.$id.'");

Yukarıdaki sorgumu aşağıdaki şekilde değiştirdiğimde json verisi alabiliyorum.

WHERE twitid ='523'

Her mantıklı insan sorunun gelen $id değişkeninin boş olduğundan kaynaklandığını söyler,
bende böyle düşündüm çünkü $id boş görünüyor
fakat boş olmadığını aşağıdaki işlem kanıtlıyor.

if($id != ""){


$sql = "INSERT INTO tablethree (name, twitid )
VALUES ('$extra', '$id')" ;
// use exec() because no results are returned
$conn->exec($sql);


}

yukarıdaki işlem çalışıyor ve veritabanına veri kayıt oluyor.
Buradan biz verinin webservise geldiğini ve webservisten veritabanına kayıtedildiğini anlıyoruz.

Fakat o zaman gelen $id verisini biz nednen kullanamıyoruz.
$_SESSION olarak kaydedilse bile çalışmıyor.
Çünkü boş görünüyor fakat boş değil.
Anlamak çok zor.
  • aristotelesin berberi  (02.11.19 20:59:58 ~ 21:11:28) 
benim dediğim şeyi yapmamışsın ki


  • nahtoderfahrung  (02.11.19 21:22:34) 
@nahtoderfahrung Tekrar merhaba;
var_dump($_POST["id"]);
yukarıdakini diyorsan aşağıdaki gibi yaptım fakat bu sefer veritabanına veri gitmedi.

$id = var_dump($_POST["id"]);
  • aristotelesin berberi  (02.11.19 21:26:10) 
Noktaları kaldırıp deneyebilir misin? Aşağıdaki gibi:

WHERE twitid ='$id'
  • mya  (02.11.19 23:42:20) 
Merhaba @mya cevabın için teşekkür ediyorum,
fakat önerini ben daha çnce denemiştim tekrar denedim sonuç değişmedi.
Başka çözüm önerisi sunmak istermisin ?

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='$id'");


yukarıdaki gibi denedim fakat yine json çıktım aşağıdaki gibi boş görünüyor.

{"employeesextra":null}{"employees":[]}

employeesextra -> bu ifadeyi ben test için yapmıştım dikkate almayınız.
  • aristotelesin berberi  (03.11.19 11:05:41) 
Şu şekilde deneyebilir misin?
tek tırnak + çift tırnak + nokta şeklinde

$statement = $conn->prepare(“SELECT name FROM tablethree WHERE twitid ='”.$id.”'”);
  • mya  (03.11.19 12:56:11) 
merhaba @mya cevabın için teşekkür ediyorum, bunu zaten denemiştim fakat takrar denedim olmadı
$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='".$id."'");
başka önerin var mı ?
  • aristotelesin berberi  (03.11.19 13:10:59) 
ekleme yapılır yapılmaz twitid'yi dbden almıyor olabilir mi? $statement = $conn->prepare den hemen önce echo id yaptığınızda ne sonuç geliyor?


  • tolstoyorospucocugudurdostoyevskiadamdir  (04.11.19 00:27:59) 
@tolstoyorospucocugudurdostoyevskiadamdir Merhaba cevabın için teşekkür ediyorum.
Dediğinizi denedim sonuç boş geliyor.
POst ile gelen id yi session atıp yazdıramıyorum bile, fakat dediğim gibi id boş değil çünkü veri geliyor, gelen veriyi web servis, veritabanına post ediyor.
  • aristotelesin berberi  (04.11.19 14:21:12) 
ulkelertwo listeniz boş, bu yüzden

String ulketwo = ulkelerListetwo.get(position); satırınız indexoutofbounds hatası veriyor.
  • eagofant  (16.10.19 16:28:50) 
@eagofant dediğin gibi 2. arraylist de isim hatası yapmışım.
Aşağıdaki gibi yaptım oldu.

ArrayList<String> ulkeler = new ArrayList<>();
ulkeler.add("TÜRKİYE");
ulkeler.add("RUSYA");
ulkeler.add("FRANSA");
ulkeler.add("İNGİLTERE");
ulkeler.add("JAPONYA");
ulkeler.add("ALMANYA");


ArrayList<String> ulkelertwo = new ArrayList<>();
ulkelertwo.add("TÜRKİYEw");
ulkelertwo.add("RUSYAw");
ulkelertwo.add("FRANSAw");
ulkelertwo.add("İNGİLTEREw");
ulkelertwo.add("JAPONYAw");
ulkelertwo.add("ALMANYAw");
;
Peki bu hatayı (indexoutofbounds ) nasıl farkettin log kayıtlarından mı ?

@kitik Merhaba cevabın için teşekkür ediyorum sorun halloldu.
  • aristotelesin berberi  (16.10.19 16:33:13) 
evet loglarınızda belirtmiş.

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  • eagofant  (16.10.19 16:38:00) 
Anladım teşekkürler.


  • aristotelesin berberi  (16.10.19 18:49:31) 
[]

Card View İçine İkinci Bir Veri Girme Sorunu / Android-Java /TwitterClone

Merhaba ben twitter clonu yapmaya çalışıyorum.

LOgin Register Bitti.

Tiwit atıp RecyclerView ile listeliyebiliyorum.



Fakat her twittin altına bir like butonu yapmam lazım.

ŞU şekilde yaptım.



holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

sayaç ++;
holder.txt.setText(Integer.toString(sayaç));
kisiekle(holder);

}
});


Buton her tıklandığında sayaç artıyor ve txt adındaki textview içine yazıyor.



Sonra kişi ekle methoduma holder parametresi vererek şu şekilde veritabanıma tıklanma sayısını atıyorum.



public void kisiekle(final CardTasarimTutucu holder){
String url = "goldgym.pro";
final String userlike = holder.txt.getText().toString().trim();
final String usertext = holder.textViewTurkce.getText().toString().trim();


StringRequest istek = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("sus", String.valueOf(holder.getAdapterPosition()));



try{
JSONObject jsonObject = new JSONObject(response);
String succes = jsonObject.getString("success");

Log.e("sus",succes);






} catch (JSONException e){
e.printStackTrace();

}





}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
}){

@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();

params.put("like",userlike);
//params.put("id",id);
return params;
}
};
Volley.newRequestQueue(mContext).add(istek);


}
Fakat bir veri daha göndermem gerekiyor oda twitin kayıtlı olduğu id bilgisi.

Çünkü hangi twiti beyendiysen o twitin id bilgisi ile tespit edip veritabanındaki satırına yazdırmak gerekiyor.



Ben şuan id bilgisi gönderemediğim için webservisime test etmek adına elle id girdim şu şekilde;



$sql = "UPDATE tabletwo SET likebtn= $like WHERE id=451" ;



Peki like tuşuna basılan twitin veritabanındaki id bilgisini nasıl alacağım ?

Tabiki twiti çekerken id bilgisinine ekleriz.



Ben de öyle yaptım . Sql sorguma id bilgisinide ekledim ve parse ederken de id bilgisini şu şekilde MainActivity sınıfının içindeki tümKelimeler methodunun içindeki for döngüsüne ekledim.



for (int i = 0; i < kelimeler.length(); i++) {
JSONObject k = kelimeler.getJSONObject(i);


String turkce = k.getString("akis");
String id = k.getString("id");




Kelimeler kelime = new Kelimeler(turkce);
Kelimeler kelimes = new Kelimeler(id);




kelimelerListe.add(kelime); // Çekilen Twit
kelimelerListe.add(kelimes); // Çekilen Twit id si

}

adapter = new KelimelerAdapter(MainActivity.this,kelimelerListe);




rv.setAdapter(adapter);


Fakat id bilgisi ayrı bir carview içinde geliyor. Şu şekilde;


user-images.githubusercontent.com

Ayrı bir card view içinde yazdığından dolayı da ben veritabanıma ekleyemiyorum.

Aynı cardview içinde benim belirlediğim bir textview de yazarsa ben onu şu şekilde yaparak veri tabanıma gönderebilirim.



örnek textview adı = belirlenmıstxt



final String usertext = holder.belirlenmıstxt.getText().toString().trim();

Yukarıda ki şekilde yaparsan ben onu veri tabanına rahatca eklerim.



Bende 2. bir ArrayList oluşturarak yapmaya çalıştım fakat olmadı.

Yardımcı olursanız çok sevinirim 3 gündür uğraşıyorum yapamadım.

githup dosyası

github.com

 
insan bir cevap verir yahu.


  • aristotelesin berberi  (12.10.19 23:42:10) 
[]

Android Like Button / id bulma sorunu / RecyclerView ve Mysql-php

Merhaba ben twitter klonu yapmaya çalışıyorum.
LOgin REgister Bitti.
twit atıp RecyclerView içerisinde görüntüleyebiliyorum.

Şİmdi card view içindeki twit lerin altına button yerleştirdim.

Bu yerleştirdiğim like butonunu dinamik olarak çalıştırmak istiyorum.

butona basıldığında sayılar artacak ve bu sayılar atılan tiwitin mysql tablosuna güncellenerek yazılacak.

Bunun için benim atılan twittin mysql tablosundaki id bulmam gerekiyor.

Son girilen veriyi bulmak istemiyorum.

BEn her twititn altında bulunan basıldığında sayıları artan like butonunun sayı bilgisini o tiwitin tablosuna koymam gerekiyor fakat id bulamıyorum.

Nasıl arayacağımı da bilmiyorum.
Biliyorum biraz karışık anlattım fakat konu karışık o yüzden.
YArdım ederseniz sevinirim.
Teşekkürler.

 
Aradigin şey position. Tıklama event'i position diye bir parametre alır. Recycler için bir item list olusturmussundur. Event metodu içinde örneğin list.get(position).getId dersen tıkladığın tweet için Id değerini verir.

Item list oluşturman gerektiğini daha önceki duyurunda söylemiştim.
  • kaptan maydanoz  (09.10.19 17:06:21) 
Efendim ben dediğiniz gibi yaparak (holder.getAdapterPosition())
id elde ediyorum fakat bu id android tarafından benim twittime verilen id.

Yani (holder.getAdapterPosition()) id ile veritabanındaki id aynı olması gerekiyor fakat aynı değil.

Belki tüm veritabanını silersek aynı anda başladığı için aynı id verilebilmiş olur ama bu yöntemle mi çalışılmalı bilemedim.

Çünkü benim amacım twittin altıdaki like butonuna tıklandığında artan sayıları veritabanına gönderip sonrada orodan çekmek.

Göndermek yeride webservis tarafında güncelleme yapıyorum çünkü like sayıları artabilir.
  • aristotelesin berberi  (09.10.19 17:28:55) 
ben olsam şöle yapardım;

veritabanında tweetler tablosunda bir girdi düşünelim

id | kullanıcıadi | text | tarih | begenisayisi | begenenler |
2 | aristo | berberlik güzel | 2019-10-9 18:25:03 | 3 | "raydi""kaptan""aristo" |

gibi bir tablo kullanırdım, tweetler yüklenirken adapter içinde:
"sql sorgusu ile tweetler çekilirken listeye koyarken, yeni bir hashmap oluşturabiliriz sanki işte misal
liste başında; Map<String, String> tweed_id_listesi= new HashMap<String, String>();

adapter içinde; tweed_id_listesi.put("liste id" ,"veritabanı id" );
adapter içinde; tweed_id_listesi.put(holder.getAdapterPosition(), db.veritabani_id);

işte kısaca eşleştiriyoz,sonrası:

beğeni tuşuna basında fonksiyon şu: php/servere istek yollarım parametre ile.

tweet_id = tweed_id_listesi.get(holder.getAdapterPosition()) //veritabanındaki id gelecek

servere istek şöyle olur misal:
blabla,com/begen.php?tweetid=" + tweet_id + "&kullanici_adi=" + kul_adi;
istek yolladıktan sonra, cevap geliyor işte succes diye, sonra tweetleri yeniden yükleriz sayı güncellenir

begen.php içinde de tweet id'sinden tweeti bulup, tabloda sayıyı artırıp, "begenenler" sütununa ekleme yaparız işte "kul_adi" şeklinde.



tweetler yüklenirken daha önce beğendimi sorgusu için ise twetler yükleirken begenenler kısmında '"kul_adi"' böyle bir şey geçiyor mu,geçiyorsa daha önce beğenmiş, tuşu kırmızı yaparsın vs

çok mu uzun oldu :/
  • masseter  (09.10.19 18:00:30 ~ 18:03:36) 
@aristo daha önce de belirttiğim gibi bir item sınıfı oluşturman gerekli. Cidden gerekli :) yoksa projenin sağlıklı bir şekilde yürüyeceğini düşünmüyorum.

Item sınıfı içinde id leri set edeceksin sonra oradan cekeceksin id'yi.
  • kaptan maydanoz  (09.10.19 18:40:15) 
@masseter , @kaptan maydanoz
Efendim teşekkür ediyorum.
Şimdi mola verdim yarın çalışmaya devam edeceğim.
Sabah dediklerinizi deneyeceğim.
Teşekkür ediyorum.
İyi akşamlar.
  • aristotelesin berberi  (09.10.19 18:47:47) 
@masseter , @kaptan maydanoz

Tekrar merhaba biraz ilerleme kaydettim, en azından şuan istediğim şeye nasıl ulaşacağımı biliyorum fakat uygulayamıyorum.

Efendim şimdi ben twitter clonu yapmak istiyorum.

Atılan twitten altına like butonu koymak ve dinamik olarak çalıştırmak istiyorum.

Fakat sorun like butonunun hangi twit id sahip olduğunu bilmiyordum.

Bu sorunu şöyle çözdüm.

Atılan tiwit veri tabanına kayıt oluyor sonra çekilerek android tarafında pars ediliyor.

Ben twit verisi çekerken id çekmiyordum.

Şimdi çekebiliyorum.

Fakat şimdide çektiğim id twitin altına yazamıyorum.

Atılan tiwit ile id ayrı card view ler halinde görünüyor.

Aynı card view içinde id ve twit olması için iki tane array list olması gerekiyor fakat onda da hata alıyorum.

public void tumKelimeler(){

String url = "goldgym.pro";

StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {

kelimelerListe = new ArrayList<>();


try {
JSONObject jsonObj = new JSONObject(response);


JSONArray kelimeler = jsonObj.getJSONArray("employees");

// looping through All Contacts
for (int i = 0; i < kelimeler.length(); i++) {
JSONObject k = kelimeler.getJSONObject(i);


String turkce = k.getString("akis");
String id = k.getString("id");




Kelimeler kelime = new Kelimeler(turkce);
Kelimeler kelimes = new Kelimeler(id);




kelimelerListe.add(kelime); // Çekilen Twit
kelimelerListe.add(kelimes); // Çekilen Twit id si

}

adapter = new KelimelerAdapter(MainActivity.this,kelimelerListe);




rv.setAdapter(adapter);
  • aristotelesin berberi  (10.10.19 14:28:47) 
Kelimeler kelime = new Kelimeler(turkce);
Kelimeler kelimes = new Kelimeler(id);

Bahsettiğim item sınıfı bu işte. Ama 1 tane olması gerekiyor sadece. O yüzden çekemiyorsun. Kodların bir yerde duruyor mu github filan? Ordan baksak daha iyi.
  • kaptan maydanoz  (10.10.19 16:08:02) 
Merhaba @kaptan maydanoz ubuntu da github deskop çalışmıyor o yüzden dual bot iLE iki işletim sistemini kullanıyorum.Şimdi windowsa geçip githup push ettim. Oyuzden bukadar uzun sürdü.

Login register kısmı başka projede yaptım onu sonrada dahil edeceğim.

Aşağıdaki linke tıklayarak çalıştığım MainActivity ulaşabilirsin.

github.com



login register kısmı olan proje

github.com



Dediğin gibi iki tane item sınıfı olmuyor hata veriyor.
  • aristotelesin berberi  (10.10.19 17:37:12) 
[]

Android Like Button Yapmak / Dinamik - web servis ile konuşan bir button

Efendim merhaba ben twetter klonu yapmaya çalışıyorum login register bitti twit atıp Recycler içinde görüntüleyebiliyorsunuz.

Fakat cardview içine like buttonu koymam lazım ve her basıldığında sayaç artsın istiyorum.

Bunu başardım fakat uygulama kapandığında sayılar da kayboluyor.
Ben buttona her tıklandığında artan sayıları veritabanına atıp oradan da çekmek istiyorum.

Başka bir yol aklıma gelmedi.

Fakat bunu da nasıl yapacağımı bilmiyorum.
Çünkü her button için bir mysql de table oluşturmam gerekiyor.

Buda çok saçma tabiki.

Yani tıkandım yardım ederseniz çok sevinirim.

Teşekkürler.

 
işin piri olmamakla birlikte;

atılan her tweet tarzı ileti zaten database'de yer almıyor mu? bu tweetin kaç kere beğenildiğini o tabloda tutabilirsin.

user tablosunda da kullanıcının beğendiği içeriklerin id'sini tutabilirsin. beğenilerim kısmını oradan çekebilirsin.
  • ayin yazari  (09.10.19 09:56:01) 
@ayin yazari - teşekkürler çok mantıklı deneyeceğim. ı love you


  • aristotelesin berberi  (09.10.19 11:27:58) 
[]

cardview for döngüsünün içine nasıl koyarım ? android - java

Merhaba twitter klonu yapmaya çalışıyorum.
Login - register kısmı tamamlandı.
Twit atabiliyor ve atılan tiwiti görüntülebiliyorum.
Son atılan twit de en üst sırada görülüyor.
Webservis olarak mysql-php kullanıyorum.
veritabanından gelen verileri android tarafına json olarak çekiyorum.
Sonra gelen json verilerini for döndüsü ile textview içine yazdırıyorum.
Fakat ben card view içinde yazılan yazı görülsün istiyorum.
Bunun için de card view for döngüsüne sokmam lazım.
Bunu nasıl yapabilirim. ?

Github proje

github.com

public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("employees");
for (int i = 0; i < jsonArray.length();i++){

JSONObject employee = jsonArray.getJSONObject(i);
String akis = employee.getString("akis");
//String lastName = employee.getString("lastName");

card_text.append(akis + "," + "\n\n");
}




} catch (JSONException e) {
e.printStackTrace();
}

 
Merhabalar. Yapman gereken şey adapter ve item siniflari oluşturmak.
Listview için olanlarla aynı şekilde. Bunu internetten bulabilirsin.
Yapman gereken;
1 main class (burada jsondan cektigin verileri for döngüsü içinde item sınıfından olusturdugun bir list icerisine atmalisin ve daha sonra olusturdugun listi adapter'a set etmelisin. )
1 item için xml arayüz ( içinde sadece cardview olan xml dosyası)
1 item sınıfı ( burada isim soyisim vs. Gerekli bilgileri tanimliyorsun, get set metotlarını olustur)
1 list adapter class ( burada item sınıfını set edip arayüzde ne nereye gelecek onu ayarliyorsun )


Internette bolca örnek vardır:)
  • kaptan maydanoz  (03.10.19 14:52:25) 
@kaptan maydanoz Merhaba öncelikle 6 gündür cevap veremediğim için özürdiliyorum. Bunun sebebi görmemem farketmediğim için üzgünüm.

Cevabın için teşekkür ediyorum fakat ben şu şekilde yaptım.

Recycler view ile yapabildim.
  • aristotelesin berberi  (09.10.19 09:31:53) 
[]

En son gönderiyi üstte gösterme / Android - Java

Efendim merhaba bir tiwitter benzeri uygulama yapmaya çalışıyorum.
login register olabiliyor,
twit atabiliyor ve tüm twitleri görebiliyorsunuz.
Fakat ben en son gönderiyi en üst sırada görmek istiyorum.
Bunu nasıl yapabilirim.
Webservise olarak mysql - php kullanıyorum.
Yardım ederseniz sevinirim.
Bu soruyu stackoverflow.com ' da da sordum fakat cevap alamadım.
Birde ekşi sözlüğümün yazılımcı elit üyelerine sormak istedim.
Detaylar

github proje detayları

github.com

 
Phpde sql sorgusu ile alakalı sanırım istediğiniz şey. "ORDER BY tarih DESC"


  • masseter  (02.10.19 14:40:17) 
@masseter merhaba cavabın için teşekkür ediyorum. Cevabın sayesinde yaptım ve oldu çok teşekkür ediyorum çok mutlu oldum.
Sonra birde sayfayı onclick yaptıktan sonra yenileme yaptım artık hiç bir sorun kalmadı.
Senin gibi bilgili biri ile sürekli takipleşmek isterim iletişim bilgilerimi gönderiyorum.
Tekrar teşekkürler.

Bazı soruların cevabı çok kolay fakat ulaşmak zor oluyor.
  • aristotelesin berberi  (02.10.19 15:08:54 ~ 15:09:07) 
[]

520mb Android Uygulama Olur mu ?

Merhaba ben bir fitness uygulaması yapıyorum. Fitnes hareketlerini video ve fotoğraf ve text şeklinde öğretecek.Uygulama internetsiz ortamda kullanısın diye herşeyi kısa hareket videolarınıda uygulamanın içine koydum.Şuan bacak kısmını bitirdim ve 30tane actvy oldu daha omuz var arka kol var var da var ve şuan boyut 520 mb bittiğinde 1 gb bile çıkabilir görünüyor.

Bunun bir sakıncası var mı uygulama ağır değil güzel çalışıyor.
Bukadar actvty kullanmadan nasıl yapabilirim.
Local html yani local webview kullanarak da yapabilirim tavsiye edermisiniz. ?

 
apk halini aldın mı hocam onun? apk hali daha düşük tutar. oldukça fazla fark eder.


  • bidakikanizialicam  (31.05.19 23:02:56) 
@bidakikanizialicam merhaba apk aldım tabletten denedim 520 mb ve daha bacak bölümü bitti .Bu kadar çok activty kullanmak doğru mu ?Değilse başka ne yapabilirim.
Bir uygulama 1 gb olsa ne olur ?
Ben uygulamalara baktım google play bile 200 mb geçmiyor.Peki bir activty tekrar tekrar mı kullanıyorlar anlayamadım.
Birde derlerken bile 5 dk falan sürüyor.
  • aristotelesin berberi  (31.05.19 23:06:26) 
1 video veya fotoğraf kaç mb ? 4-5 mb'lık fotolar yerine 900 kblık fotolar koyabilirsiniz video kalitesini düşürün daha az kaplar.


  • kitik  (31.05.19 23:06:30) 
@kitik Merhaba videolar fazla yer kaplamıyor şuan 5 tane video var hepsi yarım dk kadar. Sorun activiy'nin çok olması galiba.


  • aristotelesin berberi  (31.05.19 23:09:33) 
activity dediğiniz text dosyası kadar yer kaplar 20-30 kb yer kaplar.
sol kısımda activiylerden birine sağ tıklayıp "show in explorer" veya dosya dizinini gösteri tıklayın.
uygulamanın yüklü oldugu klasör açılacak. bir activiy'nin kaç kb oldugu veya foto ve videoların kaç mb olduğu orda yazar.
  • kitik  (31.05.19 23:19:56) 
@kitik evet videolar çok yer yaplıyor.O zaman onları ben youtube'dan çekeyim interneti olmayanlarda resimlerden bakacak artık.Başka yolu yok.
O zaman şunu diyebilirmiyiz istediğimz kadar activty kullanabiliriz sorun olmaz.Bunu diyebilirmiyiz ?
Teşekkür ediyorum.
  • aristotelesin berberi  (31.05.19 23:27:42) 
Boyut çok büyük. Açıkçası ben indirmezdim. Şöyle bir tavsiye verebilirim. Uygulama açıldığında opsiyonel bir downloader ekle. Kullanıcıya da eğer internetsiz kullanmak isterse download etmesini, aksi durumda uygulamanın internetsiz çalışmayacağını(veya bahsettiğin gibi resim de sunabilirsin) söyle. Kısaca kullanıcıya seçenek sunabilirsin.


  • gozyakansakiz  (31.05.19 23:47:25) 
@gozyakansakiz merhaba evet nike uygulaması öyle yapmış fakat onu nasıl yapacağımı bilmiyorum ilk sürüm videosuz olsun sonra öğrenince indirme tekniği ile yapacağım. Teşekkürler.
İndirme yöntemi konusunda tavsiye edebileceğin bir şey var mı firebase mi kullanmalıyım.

  • aristotelesin berberi  (31.05.19 23:52:45) 
videolar gif mi?


  • inekadam  (01.06.19 08:55:50) 
@inekadam hayır gif değildi şuan videoları kaldırdım.çok yer tutuyor. gif denmedim tavsiye edermisin ?


  • aristotelesin berberi  (01.06.19 12:02:25) 
tam tersi normalde gif daha çok yer tutar... webm'in mp4 karşısında daha az yer tutması lazım ama onu uygulamana entegre etmen ya da her cihaz oynatır mı bilmiyorum.


  • inekadam  (01.06.19 22:23:47) 
@inekadam video işini bıraktım şimdi fotoğrafları badybulding.com dan almıştım onlarda telif atabilirler o yüzden tekrar çekme yoluna gidicem işler karıştı.
Teşekkür ediyorum.

  • aristotelesin berberi  (01.06.19 22:34:12) 
[]

multiple inheritance java nedir ?

Merhaba çoklu kalıtım konusunu anlamaya çalışıyorum.
şöyle bir nesne oluşturma şekli var.

public class test{

public static void main(String args[]){

sayısal_öğrencisi ali = new sayısal_öğrencisi( new bilgisayar_mühendisliği_öğrencisi());

}

}


Nesne oluştururken new den sonraki constructor metodunun içine parametre giriyor bu nasıl mümkün olabiliyor bunu anlayamıyorum.
Teşekkürler.

 
Oncelikle Java'da multiple inheritance destegi yok, onu belirteyim. Kodun gerisini gormeden net yorum yapmak mumkun degil fakat anlamaya calistiginiz konu zannedersem composition.

Bundan once multiple inheritance'nin ne oldugundan bahsedeyim:
class Teker { ... }
class Motor { ... }
class Araba extends Teker, Motor { ... }

Gordugun uzere Araba class'i hem Teker'i hem Motor'u inherit ediyor. Fakat bunu javada yapmak mumkun degil cunku extend ifadesi kendisinden sonra sadece bir tane class'in varligina izin veriyor. Yani java sadece single inheritanceye izin veriyor. Mesela C++'ta buna benzer bir sekilde multiple inheritance yapmak mumkun. Bu sayede Araba class'i hem Teker'in hem de Motor'un fonksiyonlarini/degiskenlerini kullanabilecekti. Java'nin buna izin vermemesinin bazi sebepleri var, dil tasarlayanlarin secimi bu yonde. Genel itibariyla izin verilmemesinin sebebi olarak "diamond problem" one surulur, yazip arastirabilirsiniz.

Yukaridaki ornekten giderek compostionu aciklayayim. Yukaridaki gibi classlari inherit etmek yerine sunu yapabiliriz:
class Teker { ... }
class Motor { ... }
class Araba {
public Teker teker;
public Motor motor;
}

Sonucta araba dedigimiz sey teker ve motora sahiptir, onlardan gelmez. Yani Motor ve Araba arasindaki iliski Memeli ve Insan arasindaki iliski gibi degil.

Verdigin ornekteki classlar tam olarak neyi ifade ediyor bilmiyorum ama buradan gordugum kadariyla yukarida acikladigim iki durum icin de pek anlamli seyler ifade etmiyorlar.
  • yasli ateist  (26.05.19 11:56:03) 
@yasli ateist merhaba geç gördüğüm için özürdilerim teşekkürler.Yararlanıyorum.


  • aristotelesin berberi  (31.05.19 21:53:01) 
[]

new value nedir ? java oop

Merhaba resimdeki new value nedir bilen var mı ?
Teşekkürler.



 
dışarıdan giden değerdir.


  • karapage  (24.05.19 20:33:54) 
Merhaba @karapage anlayamadım,biraz daha detaylı anlatirmisin. ?
Teşekkürler.

  • aristotelesin berberi  (24.05.19 20:37:27) 
resimdeki public ile başlayan şeyler fonkiyondur.

public void topla(5)
denirse
{
bu parentezlerin içine 5 i yolla demektir.
}

parantezlerin içindki işleme 5 i yollarsın ve içinde o 5i kullanarak işlem yaparsın.

5 i yollama neden yapılıyor dersen.

elimizde 5 var diyelim.

bir yere yollayınca onun karesini almasını istiyorum.
başka bir yere yollayınca 5 den 3 çıksın istiyorum.
ben bunları fonksiyonlar olmadan her seferinde yapabilirim.
ama fonksiyonlar ile bu işlemler hızlanıyor.
bugun 5 yollarken yarın 10 yollayabilirim.

oop de fonsiyonların amacı budur. yapılacak işleri bölmek ve tekrar tekrar kullanabilmek.
  • karapage  (24.05.19 20:53:25) 
Tamam sen metodlara parametre yollamayı soyluyorsun onu biliyorum. fakat new value nedir onu bilmiyorum.


  • aristotelesin berberi  (24.05.19 20:56:46) 
@aristotelesin berberi adam üşenmemiş gerizekalıya anlatır gibi anlatmış hala new value nedir diye soruyosun


  • Yavuşuhlu  (24.05.19 22:00:57) 
arkadaşın anlattığı metoddaki 5 varya o velue dur diyelim ki
integer (tamsayi) bir değişken(variable) tanımladın

int i = 5;
int -- integer değişkenin tipi
i --- değişkene verilen isim yada sembol
5 --- değişkenin değeri yani value

değişken i nin değerin şu an 5
i = i + 1
değişkenin değeri 6 oldu al sana new value
yani i nin yeni değeri 6 oldu denir

değişkenin aldığı yeni değerdir

bu değer değişkenin kullanım durumuna göre new value yani yeni değerde alabilir
değeri değişmeden kalabilirde vereceğin değerle hafızada o değer için bir yer ayrılır bu yüzden önemlidir değişkenin hiç bir şekilde yeni değer alması istenmiyorsa constant değişken tanımlanır ve bu değişken hiç bir şekilde new value alamaz değeri değişmez javada constant değişken final deyimi ile tanımlanır
  • baknedicem  (24.05.19 22:14:39 ~ 22:22:32) 
Merhaba @baknedicem gerçekten güzel anlattın teşekkür ediyorum.

@Yavuşuhlu dostum biraz geç anladım sory.

@karapage teşekkürler.
  • aristotelesin berberi  (25.05.19 11:55:44) 
[]

setOnClickListener nasıl çalışır detay java android

btnone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});
efendim merhabalar bilginize ihtiyacım var bilginizden yararlanmamı sağlamanızı ve mahrum bırakmamanızı rica ediyorum.
Ben bu setOnClickListenerarka tarafta nasıl calıstigini anlamaya çalışıyorum
android studioda isimlerin uzerine gelince ctrl basili tutup maus ile tiklayinca kodun arka tarafina gidiyorya bende oyle yaptim ve
setOnClickListener ın bir metod ve
OnClickListener da view clasının içine yazılmış bir interface oldugunu ögrendim
setOnClickListener in ne is yaptigini biliyorum tiklanma olayi oldugunda ne yapilmasini istiyorsaniz yaziyorsunuz bir dinleyici ama aslinda biz bir classin bir metodunu kullanıyoruz fakat kullanma sekli cok farkli normalde biz bir classin bir metodunu kullanmak istiyorsak nesnesini olistururuz veya extent veya implement ederiz fakat burada
setOnClickListener in icine parametre olarak new aliyor sonra bir imterface aliyor bu nasil olabiliyor anlayamiyorum.

tesekkurler.
detay
setOnClickListener View.java nin metodu

 
onceki sorularinda aciklamistim bunu.

setOnClickListener parametre olarak View.OnClickListener interface'inin bir instance'ini bekliyor. orada yaptigin ilk once new View.OnclickListener(){} seklinde bu interface'i implement eden abstract class initialize ediyorsun daha sonra da bu instance'i setOnClickListener'a parametre olarak yolluyorsun.

sana tavsiyem android calismayi birakip ilk once OOP ve java temelini gelistirmen. sordugun soruda android ile ilgili bir durum yok. java ve OOP'nin en temelleri ile ilgili eksikligin var. yanlis hatirlamiyorsam OOP'yi C# uzerinden calisiyordun. eger android ogrenmeye calisiyorsan java uzerinden OOP ogrenmeye calis. maalesed c#'ta bazi seyler farkli
  • crucio  (30.04.19 11:40:29) 
Efendim merhabalar
# Onclicklistener interfacesini implement eden abstract classı bulamadım.
# efendim ben hiç c# calismadim.hep java çalışıyorum.
# Ben oop konularını bitirmiştim fakat onerileriniz sayesinde anladigimdan şüphe ederek tekrar etme karari aldim. Bugun saat 8'e kadar oop konusunu tekrar edecegim.
# Belki bu aksam belki yarin tekrar bilginize ihtiyac duyabilirim benimle bilgilerinizi ve tecrubenizi oaylasmanizi tekrar rica ediyorum.

tesekkurler.
@curucio ve @entegre

github.com
  • aristotelesin berberi  (30.04.19 13:22:35) 
onclicklistenere implement eden abstract class senin ilk soruda belirttigin yer iste "new View.OnClickListener() {}" dediginde View.OnClickListener interface'inden abstract class instantiate etmis oluyorsun.

eger ingilizcen varsa su kursu takip edebilirsin. turkce altyazisi da varmis gerci. www.coursera.org
  • crucio  (30.04.19 13:56:00 ~ 13:59:33) 
@crucio
# galiba ne demek istedigini anladım abstract class orneklemesi olusturuyor diyorsun.
# Ben bugun biraz oop çalışacağım daha iyi anlayacagimi dusunuyorum calisinca.
# Dostum onerdigin kurs ucretli ben oop konusunu ucretsiz bilgilerden yararlanarakn ogrenebilirim tesekkurler.
  • aristotelesin berberi  (30.04.19 14:47:24) 
kursun ucretli oldugunu farketmemisim, pardon. buna bak o zmn, bu ucretsiz

eu.udacity.com
  • crucio  (01.05.19 03:08:41) 
Günaydın @crucio simdi anladim ki oop konusunda ciddi bilgi eksikligim varmiş.Bu bilgi eksikligimi yeni fark ediyorum ve bir kac gunu mu bu konuyu tam olarak kavramak icin ayirdim.
teşekkür ederim beni aydinlattigin icin buyuksun.
verdigin adres guzel kayit oldum iyi ki soyledin.
  • aristotelesin berberi  (01.05.19 09:21:01) 
[]

Android Java

Merhaba ben uygulama içi satın alma işlemini anlamaya çalışıyorum anlamadığım bir konu var.
Şöyle bir tanımlama kullanılmış.

private final BillingClient mBillingClient;
ctrl ile BillingClient üzerine geldiğim de BillingClient.java açılıyor ve BillingClient.javanın bir abstact class olduğunu anlıyorum fakat abstract clas extensts ile dahil edilir.

Hemen aklıma casting yapılma ihtimali geldi fakat bunun içinde kalıtım olması gerekiyor ve kalıtım içinde extensts veya interface ise de imlements kullanılır böyle bir şey kullanılmamış.

Bu tanımlama şekli nedir acaca ?


codelabs.developers.google.com

 
oncelikle abstract class'i illa extend etmek zorunda degilsin. Anonymous olarak da bu classi implement edebilirsin.

new BillingClient() {

@Override
public void myAbstractMethod() {

}
}
seklinde BillingClient instance'i olusturup kullanabilirsin. AsyncTask class'ina bakarsan o da ayni sekilde.

ikincisi extend edilen class'lar super classlari yerine kullanilabilinir. yani


public class BillingClientImpl extends BillingClient {

}
olsun diyelim.

BillingClient billingClient = new BillingClientImpl(); seklinde kullanabilirsin. Gorunuse gore OOP konularini tam kavrayamamissin. OOP uzerine biraz daha calismalisin
  • crucio  (04.04.19 11:38:33) 
Merhaba @crucio bana değerli vaktini ayırarak cevap verdiğin için teşekkür ediyorum. Verdiğin cevap'ı çok faydalı buldum.

Fakat bilgisayarı güncelemem gerekti ve aksilikler yaşadım O yüzden geri dönüş yapmam uzun sürdür özür diliyorum.
instance oluşturarak abstract class'ı oluşturabilirsin diyorsun evet denedim oluyor fakat aşağıda vereceğim link te base class'ların instancesi oluşturulamaz diyor.

www.akinabdullahoglu.com

Birde bu olayın mantığını tam anlayamadım.
Abstrac class soyut class olduğu için nesne oluşturulamaz yani ram'de yer ayrılmaz ama nesne oluşturmak için kullanılan new operatörü absrtact class'ın instance'si oluşturulurken de kullanılabilir peki bu new tam olarak ne yapıyor ?

Aşağıda verdiğim link'teki yazıları google çeviri kullanarak okudum ama tam anlayamadım.

stackoverflow.com

Ayrıca bir abstact class'ı bir metod gibi yazıp nasıl örnekleme oluşturulabiliyor kafam almıyor.

Sonuçta BillingClient bir abstrac class olduğunu kabul edersek bir class'ı metot gibi yazmak da ne demek oluyor new BillingClient() {}

İşe yaradığını biliyorum denedim oluyor fakat mantığını anlayamadım.

İkinci örneğine gelirsek

BillingClient billingClient = new BillingClientImpl();
yukarıda ki yöntemle biz zoyut bir sınıfı yani ram'de yer ayrılamayan bir sınıfı BillingClientImpl sınıfının ram'deki yerini kullanmasını sağlıyoruz değil mi ?

Soyut sınıf somut sınıfın ram'deki yerini kullanıyor.
Doğru mu anladım ?
  • aristotelesin berberi  (09.04.19 12:47:14) 
selam,

rica ederim yardimci olabildigime sevindim. oncelikle terimlerin turkcelerini bilmiyorum o yuzden ingilizce terimler kullanicam kusura bakma.

-verdigin linkte c# icin bahsetmis. c#'da dedigin gibi abstract classlari anonymous class olarak extend edip instantiate edemezsin. java'da bu mumkun. aslinda javada yaptigimiz biraz syntactic sugar gibi dusunebilirsin.
new BillingClient() {} seklinde abstract class'in anonymous instance'ini olusturdugumuzda arka planda java bu BillingClient'tan extend eden baska bir class tanimliyor. genelde bunun ismi BaskaBirClassAdi_$1 seklinde olur. yani aslinda java compiler su sekilde bir kod olusturuyor

public class BaskaBirClassAdi_$1 extends BillingClient{
public vois abstractClass() {
//doSomething
}
}

ve bu class'in instance'ini olusturup sana donuyor. Eger kodu debug edip abstractClass icinde class adina bakarsan class adinin bu sekilde oldugunu gorursun.

"new" operatorunun amaci memory allocation yapmaktir. memory allocation yapmak hafizada o alani sadece bu class'in kullanimi icin isaretlemek demektir. henuz bu hafizada bu alana birsey yazilmadi, cop veri var su anda burada. constructor'da ise bu hafizaya class bilgileri yaziliyor. yani aslinda new operatoru eger C yada C++ biliyorsan "malloc" fonksiyonunun islevini goruyor. java daha high level bir dil oldugu icin memory allocation'i ve initialization'i tek bir komutta yapiyor.

"new BillingClient() {}" bu kullanimin nasil calistigini yukarida yazdim, aciklayici olmustur sanirim.

BillingClient billingClient = new BillingClientImpl(); burada yaptigimiz da polymorphisim. Extend edilen class'a base class gibi davraniyoruz. bu nesne ile etkilesime gecenler sadece base class'in ozelliklerini gorebiliyor.
  • crucio  (09.04.19 13:38:58) 
merhaba @crucio verdiğin bilgiler için çok çok teşekkür ediyorum.

BillingClient'tan extend eden baska bir class tanimliyor

cümlen gerçekten beni aydınlattı yazını anlamaya çalışıyorum debug konusunu öğrenmeye çalışıyorum.

Yarın tekrar sorular sormak istiyorum bu bilgileri sindirdikten sonra gerçekten çok bilgili birisin çok teşekkürler.
  • aristotelesin berberi  (09.04.19 15:54:32) 
@crucio merhaba nasılsın, bir kaç sorum var cevaplarsan çok fayda sağlayacağım.

1. Sorum extent edilen abstract classın nesnesini oluşturmak ile ilgili;
biz eğer bir abstact classı extent ettiysek onun metotlarını ctrl+o yaparak çağırabiliriz, extent edilmiş bir abstact classın neden nesnesini oluşturmaya ihtiyac duyuyoruz.Abstact class zaten soyut class bunun nesnesini oluşturduğumuzda bu remde yer tutar ve soyut olmaktan çıkar.


Galiba kafamda doğru olduğunu düşündüğüm şöyle bir düşünce var
ben bir classın metotlarını çağırmak için nesnesini oluşturmam gerektiğini düşünüyorum. Bu yanlış mı ?

2. Sorum da bir classı debug edip bir abstac classın şu şekilde oluşturup
new BillingClient() {

@Override
public void myAbstractMethod() {

}
}
sonra debug ettiğimde arka planda nesne oluşturan metotdu bulamadım nasıl bulacağımı bana öğretebilirmisin.
Bu bilgi çok işime yarayacak çünkü.
Ben debug edebiliyorum fakat dediğin metodu bulamıyorum bulamıyorum.
Teşekkürler.
  • aristotelesin berberi  (15.04.19 19:15:09) 
[]

Android Java Php Post İşlemi

Merhaba ben Android uygulaması yapmaya çalışıyorum fakat üye giriş kontrolünü yapamıyorum volley kullanarak php tarafına post edebiliyorum php ile de mysql veri tabanıma kayıt yapabiliyorum kayıtlı veriyi json çevirerek yine volley kütüphanesini kullanarak uygulamamda çağırabiliyorum ama kullanıcı giriş kontrolü için benim php tarafına post edebildiğim veriyi kullanmam lazım fakat kullanamıyorum misal android de edittext'imi php tarafına post ettim

php tarafında durum bu

$username = $_POST["ad"];

bu veriyi veritabanıma kaydedebiliyorum fakat

print $username;

dediğimde çıktı alamıyorum

bunu html form ile php tarafına post ederek denedim print ediyor fakat android den gelen veriyi veritabanına kaydedebildiği halde print edemiyorum.
teşekkürler.

eğer print edebilsem bu o veriyi kullanabildiğimi gösterecek bende o veriyi veritabanındaki veri ile karşılaştıracağım var ise veya yok ise tekrar uygulamama göndericeğim bu şekilde kontrol edebileceğim.

 
bir kac hafta once de buna benzer soruyu soran sen miydin? eger yukaridaki kodda $username bos ise demekki android tarafindan bu veriyi yollayamamissin. degeri edittext'ten alabildigini varsayiyorum. kodunu gormedigim icin birsey diyemem ama muhtemelen ya yanlis parametre adi kullaniyorsun, ya post degil get yapiyorsun, yada parametreyi post parametresi olarak degil query parametresi olarak yolluyorsun. kodunu gormeden birsey demek zor. eger daha oncede soruyu soran sensen, sorunlari cok yanlis yerde ariyorsun ve maalesef temel duzeyde ciddi bilgi eksikliklerin var. yapmaya calistigin is cok basit ama haftalardir bununla ugrasiyor gibisin ve soruyu sorma seklinden vs sorunu yada yapmak istedigin seyi tam kavrayamamis gibisin.

son bir oneri daha oncede dedigim gibi volley'i birak. deprecate olmus, guncellenmeyen ve dokumantasyonu eksik bir kutuphane. OkHttp+retrofit kullan.
  • crucio  (30.01.19 22:17:14) 
[]

Android Java localhost url hatası / json dosya çekme / https ve http farkı

Merhaba benim bir json dosyam var onu githup hasabıma yükledim ve oradan bir url aldım o url ile http kütüphanelerini kullanarak uygulamamın içinde gösteriyorum şu şekilde

codeshare.io

ama githup yüklediğim json dosyamı xampp kullanarak local hostumdan çekmeye çalıştığımda hata alıyorum

192.168.1.136

yukarıdaki bu url ile bilgisayarımda ki tarayıcıdan girebiliyorum ama kodlarımın içine yazdığımda hata alıyorum neden sizce ne yapmam gerekiyor.

githupdaki json dosyamın urlsi https
local hostumdaki json dosyam da http

bu yüzden mi olmuyor acaba

githup da yüklediğim json dosyam

raw.githubusercontent.com

xampp localhost daki json dosyam

githupdaki json dosyamı çağırdığımda geliyor.

192.168.1.136

 
oncelikle birinci problem 192.168.1.136 bir "private" network adresi, yani bu adrese sadece seni networkune bagli bir kaynaktan erisilebilir. ornegin bu duyuruda bu linke tiklayan kimse bu adrese erisemedi. Android telefon ayni networke bagli ise erisir, ama bagli degil ise erisemez. github linkine erisebiliyorsun cunku github acik bir ip ve domaine sahip.

ikinci problemise bu json dosyanin oldugu sever disaridan bir kaynaga erisim sagliyor mu. Buna CORS yani cross origin resource sharing deniliyor. yani serverde disaridan, senin durumunda android uygulamasindan bu icerige erismesi engellenmis ise bunu erisime acmalisin. tabi bu server ayarlarindan veya orda kullanilan programlama dili ile yapilabilir.

Nasil bir hata mesahi aldigini da yazarsan belki daha somut cevaplar verilebilir.
  • emrahday  (25.01.19 13:49:58 ~ 13:51:03) 
@emrahday hocam merhaba
Android telefon ayni networke bagli ise erisir
sözünüzden anladığım şu uygulamam amilatörde çalışıyor ve bilgisayarla aynı internet ağını kullanıyor burada sorun yok zaten ben bilgisayarımdan girebildiğim url ile emilatörümün tarayıcısından da girmeyi denedim oluyor.

2. şık ise cross origin resource sharing konusu bunu da şöyle açıklayayım ben xmapp serverımdaki php dosyalarıma erişebiliyorum buda dışarıdan erişimi açık olduğunu göstermiyormu.

cross origin resource sharing konusu hakkında bir bilgim yok.
hata mesajıda eğer benim return etmek istediğim değişkeni return etmessediye altına bir return daha koydum onun içinede settext"hata" yazdım bu dönüyor.

sorun zaten url de ama ne yapmam gerekiyor bu sorun için

birde ben google playda bir webview uygulama yayınlamıştım sitem http idi ve açılmıyordu onu https yaptım ve oldu sorun galiba bu ama local host url mi de https yapamamya bunu için bir kod falan yok mudur.
  • aristotelesin berberi  (25.01.19 14:10:13 ~ 14:10:23) 
koda baktigimda su kisimda aldigin hata yazdiriliyor. buradaki hata (Exception) problemin ne oldugunu mutlaka soyler.

} catch (Exception e) {
e.printStackTrace();
}

http veya https olmasi da muhtemel bir durum, server sadece https kabul ediyor da olabilir. bunun kesin nedeni ancak bu Exception neyi ifade ediyor ona bakarak cozulebilir.
  • emrahday  (25.01.19 14:17:34) 
xampp root path üzerinden jsonhttp.json istiyorsun, bu biraz garip geldi.

genelde xampp altında site dizinleri (domain gibi davranan) olur ve dosya isminin önüne bu dizin ismi yazılır.

örnek: 192.168.1.136/site_ismi/dosya_ismi

Senin dosyan xampp'ın altında tam olarak nerede, hangi dizinlerin içerisinde duruyor?
Bir de "192.168.1.136" adresini browser'dan çağırdığında karşına ne geliyor?
  • velhasilkelam  (25.01.19 14:23:01 ~ 14:23:24) 
emrahday hocam merhaba

} catch (Exception e) {
e.printStackTrace();


}
return "hata"; burası dönüyor

uygulama ilk açıldığındaki ekran görüntüsü

ibb.co

uygulama local host linki ile çalıştığında ve butona basıldığındaki ekran görüntüsü
ibb.co

uygulama githup linki ile çalıştığnda ve butona basıldığındaki ekran görüntüsü

ibb.co
  • aristotelesin berberi  (25.01.19 14:49:19) 
@velhasilkelam hocam merhaba



192.168.1.136

bu adrese tıkladığımdaki ekran görüntüsü

ibb.co

yani json dosyam açılıyor
  • aristotelesin berberi  (25.01.19 14:52:52) 
@emrahday
@velhasilkelam

hocalarım sorun galiba çözüldü

stackoverflow.com

sorun emilatörden kaynaklanıyormus kendi android telefonumu devoleper modunda usp ile bağlayıp çalıştırdım oldu çok teşekkür ediyorum.
  • aristotelesin berberi  (25.01.19 15:23:31) 
[]

Android Volley Kütüphanesi Metodları

Merhaba bir süredir mobil uygulama çıkartmaya çalışıyorum ama 5 gündür ilerleyemiyorum çünkü edittext'imi php tarafına post edemiyorum ErrorListener'a düşüyor bende nerede hata yaptığımı anlayamama sebebi mi volley kütüphanesine hakim olmamamdan kaynaklandığını düşünerek şöyle bir fikir geldi aklıma volley kütüphanesi mettodlardan oluşuyor bende kullandığım ama ne işe yaradığını bilmediğimiz metodların ne işe yaradığını öğrenirsen volley kütüphanesine hakim olurum diye düşündüm sizlerden ricam öğrenmek istediğim aşağıdaki metodların amacını bana söylemeniz teşekkürler.
çalışmayan metodum burada da yer alıyor incelemek ve nerede hata yaptığımı söylemek isterseniz çok sevinirim.
stackoverflow.com

1.  public void onResponse(String response)

2.  public void onErrorResponse(VolleyError error) (hata mesajını bastırmak için diye biliyorum.)

3. protected Map<String, String>

4. getParams()

5. throws

 
github.com
1- onResponse : bir response döndüğünde çağrılır.
2 -public void onErrorResponse(VolleyError error) bir hata olduğunda ilgili hata kodu ile çağrılan method. (hata mesajı olmayabilir!)
3- gelecegiyazanlar.turkcell.com.tr
4- POST ya da PUT requestte kullanılacak parametre listesini döndüren method
5- okanuzun.com
  • oz suser  (22.01.19 16:22:14) 
hata olarak ne yazıyor?


  • contavolta  (22.01.19 16:28:13) 
@oz suser efendim cevaplarınızı inceliyorum teşekkürler. fakat onResponse response döndüğünde çağırılıyor demişsiniz çağırılıyor da ne yapıyor yapacağı şeyi içine mi yazmamız lazım ve response dönmek ne demek söylermisin. teşekkür ediyorum.


  • aristotelesin berberi  (22.01.19 17:05:49) 
simdi http uzerinden bir adress(url) cagiriyorsun bu ornekte. yani bir internet adresine bir bilgiyi "http post" yapiyorsun. volley kutuphanesi de bu "http" islemlerini kolaylastirmak icin kullanilan bir kutuphane. bu http islemlerine "request" denir. bir adrese post veya get protokolunu kullanrak http request yarparsin o adress de sana cevap verir yani "response" yapar.

senin ornek kodunda da POST yontemi ile verdigin url ye bir http request yapiyorsun, peki bunu yaptiginda ne oluyor karsi taraftan yani senin php server dan bir response donuyor. eger donen response basarili olsaydi onResponse methodu cagirilirdi ve bu methods bir string bilgisi gonderilirdi. Artik on responsda yapmak istedigin isleri yapardin. On response icinde eger http request basarili olursa ne yapacaksin o islemleri yazarsin. ama bu durumda bir hata olutor ve onErrorResponse methodu cagriliyor ve "error" bilgisi donuyor, yani burada artik bir hata aldin hata durumunda ne yapacak o kodu yazacaksin. Yani VolleyError objesi senin aldigin hata ile ilgili bilgiyi tutuyor. bu bilgi bir hata kodu olablir, ve hata ile ilgili aciklama olabilir. Yani senin incelemen gereken sey "VolleyError error" objesi, bak bakalim icinde ne var, niye hata vermis.

Olasi problemler, POST request yaptigin adress (URL) yanlis olabilir, bu post bilgisi icindeki "Body" yani gonderdigin bilgi duzgun formatta olmayabilir, firewall bloklayabilir, CORS problemi olabilir yani olasi problemler o kadar cok ki koda bakarak bunu anlamak guc. Ama bu hatanin nedeni senin log dosyanda, VolleyError objende, ya da kullandigin IDE nin terminal loglarinda mevcuttur kesinlikle, onlari incelemen gerekir.

Sordugun soruda 3, 5 ise tamamen java programlama dili ile ilgili konular, android veya Volley kutuphanesi ile ilgili degil. Ayrica bunlar cok genis konular. kisaca 3. sorudaki Map javada kullanilan bir data yapisi, icinde iki tane string key value barindiriyor. 5. sorudaki throws ise javada bir hata firlatma yontemi.

Volley kutuphanesini ogrenmeden once, sana onerecegin ogrenme yontemi sunlardir
1. Http temelleri
2. Java programlama dili temelleri
3. Android API temelleri
4. Volley kutuphanesi

bu adimlari gitmezsen volley kutuphanesini anlaman guc olabilir.
  • emrahday  (22.01.19 17:19:53 ~ 17:24:28) 
@emrahday hocam size geri dönüş yapacağım şimdi anlamaya çalışıyorum söylediklerinizi teşekkürler.


  • aristotelesin berberi  (22.01.19 21:17:54) 
-oncelikle paylastigin kod kismindan sorunu anlamak mumkun degil. soylendigi gibi request'in fail ediyor. bunun bir suru sebebi olabilir. request yaptigin url post metodunu kabul etmiyor olabilir, parametrelerin eksik/hatali olabilir. sunucu tarafinda hata olabilir.
-ikincisi volley kutuphanesi deprecate oldu. volley ile ugrasma, OkHttp ve retrofit kutuphanelerini kullan. hem dokumantasyonlari daha iyi hem daha populer olduklari icin daha fazla kaynak bulabilirsin hem de daha iyi ve daha esnek kutuphaneler.
-son olarak da postman uygulamasina bak, postman yaptigin requestleri replicate edip donen hata mesajlarini guzelce gorebilirsin.
  • crucio  (23.01.19 01:55:55) 
@crucio
Hocam merhaba geç cevap vermemin sebebi bir süredir yazdıklarınız ile alakadar olmamdır.

Öncelikle teşekkür ediyorum volley kütüphanesini bıraktım ama neden volley kullanım dışı oldu onu da merek ediyorum
ve söylediğiniz kütüphaneleri anlamaya çalışırken sadi eren şekerin şu videosuna

https*

rastladım videoda bir json dosyasını android'in içinden çağırıyor bende denedim ve çalıştı kodlarım burada

codeshare.io

fakat ben json dosyamı githup urlsi ile çağırdım bunun yerine xampp ile local hostdaki json dosyamı url şeklinde yazdığımda hata alıyorum

urlyi yazarken ip adresimi ve / dosya uzantımı yazıyorum ama olmuyor

ne yapmam gerekiyor

benim localdaki json dosyamı çağırmam için farklı bir android izni gerekiyor olabilir mi
internet iznim var url de de yanlışlık yok aynı urlyi tarayıcıda açabiliyorum teşekkürler.
  • aristotelesin berberi  (24.01.19 18:08:22) 
[]

Android'de edittext'di php tarafına post edemiyorum Lütfen yardım edin.

Merhaba 3 gündür uğraşıyorum ama yapamadım anlamaya çalıştıkça daha karmaşıklaştı acaba nerede hata yapıyorum.

MainActivity.Java


(bkz: package com.example.vezir.mysql_one;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;


import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
Button btn;
EditText edittextone,edittexttou,edittextthree;
String url = "localhost";



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn);
edittextone = findViewById(R.id.edittextone);
edittexttou = findViewById(R.id.edittexttou);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
verileriyolla();
}
});
}
public void verileriyolla(){



final String username=edittextone.getText().toString();
final String password=edittexttou.getText().toString();

if(username.equals("")==false && password.equals("")==false)
{
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

String url = "localhost"; // Post atılan adres.
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "BAŞARILI", Toast.LENGTH_LONG).show();

}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "HATALI", Toast.LENGTH_LONG).show();
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("username", username);
params.put("password", password);

return params;
}
};
queue.add(postRequest);
}
else
{
Toast.makeText(MainActivity.this,"Lütfen Gerekli Alanları Doldurun",Toast.LENGTH_LONG).show();
}

}




}

)bknz parantezi


Php Kısmı


<?php

$username=$_POST["username"];
$password=$_POST["password"];





try {
$db = new PDO("mysql:host=localhost;dbname=androidthree", "root", "");
print "başarılı".$username.$password;
} catch ( PDOException $e ){
print $e->getMessage();
}






$ekle=$db->query("insert into fitnesstthree(ad,soyad) values('$username','$password')");



if($ekle){

echo "Başarıyla Eklendi.";

}else{

echo "Eklenemedi.";

}




?>


dostlarım php ve sorun yok form ile index oluşturup post ettim ve veri tabanına kayıt yaptım sorun android tarafında ki edittext post edilmiyor.

Volley küübhanesine hakim değilim türkçe kaynak bulamıyorum aykut taşdelenin kitabında bile volley yok kaynak tavsiye edermisiniz. teşekkürler.
Birde Volley ile Rest Api konusunu öğrenmeye çalışırken anlamadığım 2 method var onlarıda sormak istiyorum.
getSimpleName();
getInstance();

Android ile php kullanarak mysql veri eklemeyi çok karışık anlatıyorlar. sadece bu sitede ki örneği anlayabildim o da button aktif etmemiş onclick listener kullanmamış onu da ben ekledim yani aşşağıdaki örneği yapmaya çalışıyorum aslında.

delimuhendis.info

 
Örneğin bir tık karışık. Bir de senin kod asenkron (async) çalışıyor anladığım kadar ile.
Genelde mobil için daha tercih edilir bir yöntem tabi. Ama ilk adım için daha basit bir şey ile sonuç almayı başarabilirsen onun üzerinden gelişim sağlarsın diye düşünüyorum.
İnternetten bulduğum senkron (sync) örneği basit bir dil ile anlatmaya çalıştım.

Not: Öncelik bu işin metodolojisini öğrenmeni tavsiye ederim.
Örnek olarak http çalışma yapısını daha iyi kavrarsan hangi dili kullanırsan kullan yapman gereken şeyi bildiğin için onu yapacak kod'a erişimin daha hızlı olacaktır.

public void postData() {
// Http bağlantıyı oluştur
HttpClient httpclient = new DefaultHttpClient();

// Http Post methodu ile gönderim yapacağın için HttpPost sınıfını kullan
HttpPost httppost = new HttpPost("localhost");

try {
// Post methodu ile göndereceğin parametreleri oluştur
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", "göndereceğin kullanıcı adı"));
nameValuePairs.add(new BasicNameValuePair("password", "göndereceğin şifre"));

//Oluşturduğun parametreleri yine üstte oluşturduğun httpPost instance'a dahil et
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// En üsste oluşturuduğun bağlantının içerisine httpost'u koyarak gönder.
HttpResponse response = httpclient.execute(httppost);
//Eğer php'den bir geri dönöş bekliyorsan HttpResponse response içerisinde olacak


} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
  • velhasilkelam  (19.01.19 22:39:54 ~ 23:07:12) 
@velhasilkelam dostum teşekkür ediyorum bu yöntem daha basit geldi bunu anlamaya çalışıcam post edebilirsem php tarafına bu yöntemi kullanırım volley kütüphanesini anlayamadım zordu sen volley kütüphanesini biliyor musun ? ve nasıl öğrendin sence de zor mu ?


  • aristotelesin berberi  (20.01.19 15:51:11) 
Volley Google'ın projesi. Başarılı bir http client ama ilk adım için biraz karışık.

Sonuç olarak arayacağın şey yine böyle bir kütüphane olacak.
İhtiyaçların seni zaten gerekli yere yönlendirecek; Volley veya kafanı ilk planda karıştıran şeyler için çok acele etme.

Basit olsun ama çalışsın :)
  • velhasilkelam  (21.01.19 11:14:17) 
@velhasilkelam dostum volley kütüphanesinin bu metodlarının ne işe yaradığını biliyormusun.
1. public void onResponse(String response)

2. public void onErrorResponse(VolleyError error) (hata mesajını bastırmak için diye biliyorum.)

3. protected Map<String, String>

4. getParams()

5. throws

6. AuthFailureError

7.Map<String,String> params=new HashMap<String, String>();

8. params.put
  • aristotelesin berberi  (22.01.19 15:21:22) 
[]

java default constructor kullanmasak olur mu ?

efendim merhabalar ben şunu anlayamadım yardımcı olursan çok rahatlarım.
şimdi bir class nesnesini oluşturmak için new operatörü ile default constructor oluşturabilirim

birde new operatörü kullanmadan class ismi ile aynı bir constructor oluşturabiliriz

2 şekildede class'ın nesnesi oluşuyorsa yani bellekte yer ayırılıyorsa default constructor kullanmayalım ne gerek var direk class ismi ile aynı bir constructor oluşturalım (parametreli veya parametresiz) olsun bitsin olmaz mı ? teşekkür ediyorum.


edit cevap : örnek yok

 
zaten default constructor olusturmana gerek yok ki, sen constructor yazmasan bile arkada derleme zamaninda default constructor parametresiz sekilde olusturulur. ama eger sen dersen ki default olusturulan benim isime yaramaz, ben kendim olusturacam o zaman arkada default olani olusturmaz.


  • emrahday  (02.01.19 11:36:35) 
@emrahday merhaba yani new operatörü ile default constructor oluşturmaya gerek yok değil mi ?

biz parametresiz constructor oluşturduğumuz da zaten arka pilanda default constructor oluşuyor diyorsun ve parametreli 2. bir constructor oluşturduğunda da default constructor iptal oluyor diyorsun değil mi doğru mu anladım ?


isim isism1 = new isim(); buna gerek yok eğer


bunu yaptıysak

public isim (){ parametresiz
}
public isim (int sayi){parametreli
}

doğrumu anladım ? teşekkürler.
  • aristotelesin berberi  (02.01.19 11:47:38) 
@yazarken ellerini birakan herif

evet aradığım cevap Overloading' miş teşekkür ediyorum ben bu konuyu biraz araştıracağım size ekşi sözlükten java ile ilgili sorular sorup bilginizden yararlanmak isterim uygun görürseniz.

ama tekrar emin olmak istiyorum

aşağıdaki Overloading yöntem oluyor

public isim (){ parametresiz
}
public isim (int sayi){parametreli
}

peki Overloading yaptığımızda

aşağıdakine gerek olmuyor değil mi ?

isim isism1 = new isim(); -----Overloading yaptıysak buna gerek yok diyebilirmiyiz ?
  • aristotelesin berberi  (02.01.19 12:26:59) 
verdigin ornekte bikac kafa karisikligini gideryim;

"new" anahtar kelimse bir class dan obje olustrmak icin kullanir. Bu objeyi olustururken de o class icinde tanimli constructor kullanir.

public class Isim {
public Isim(){
}
}

yani bu ornekte "new Isim()" dediginde isim classina gider ve isim() constructorunu kullanarak bir obje olusturur. (Not: consructor ve class birebir ayni isme sahip olmali ve ikisinde de ilk harf hep buyuk olmali. )

constructor iki turlu tanimlanir, acik(explicit) veya kapali(implicit) seklinde. yani sen bu sekilde

public class Isim {
}

bir class yazdin, ama hicbir constructor yazmadin icine, java compiler derleme sirasinda otomatik olarak default constructor olusturur ve senin classini bu sekilde cevirir.

public class Isim {
public Isim(){
}
}

ama dilersen sen bu implicit(kapali) yontemi degilde acik acik (explicit) sekilde kendinde yazabilirsin. bu durumda java compiler derleme sirasinda default constructor olusturmaktan vazgececektir.

bir de bazi durumlarda mevcut constructor sana yeterli olmayabilir. ornegin yeni bir isim objesi olusturacaksin ama bu isim objesi bir rakam almak durumunda ve o rakamai gondermelisin.
new Isim(123); gibi.

yani sen Isim classini cagiracaksin ama constructror bir parametre alamali. bu durumda mevct constructor icin "overload" constructor yazmalisin. Ornegin;
public class Isim {
public Isim(){}
public Isim(int sayi){}
}

yani artik Isim sinifi iki tane constructor sahibi olmustur, overload yapilmistir. artik obje yaratirken ister new Isim(); istersen de new Isim(123) cagirarak obje olusturabilirsin.

yani overload yapsan da yapmasan da "new" anahtar kelimesine ihtiyacin var. dikkat et bu yontem "overload", genelde "override" ve "overload" birbirine karisitirilir, is gorusmelerinin populer sorusudur overload ve override farki.

Peki new anahter kelimesi ne gibi durumlarda kullanilmaz. Ornegin "Factory pattern" denilen bir sablon sekli vardir. bu bir static method yardimi ile bir obje doner. bu durumda static methodun oldugu sinifi new anahtar kelimesi ile cagirman gerekmez. Ornegin;

public class Isim {
public static Isim getIsim (){
return new Isim();
}
}

dikkat et burada bir static getIsim diye method var. bu bir method, constructor degil. ama bu method bir new anahtar kelimesi ile Isim objesi olusturup donuyor. eger boyle bir factory methodun var ise

Isim isim = Isim.getIsim();

seklinde hicbir new anahtar kelimesi kullanmadan objeyi alabilirsin, cunku static factory methdo o objeyi icindeki new ile olusturup sana donecektir. sana ise static sinifi cagirmak duser. static siniflar hicbir obje olusturmadan cagirilabilir, yani new anahtar kelimesine ihtiyac yoktur.

ozetle java object oriented bir dil oldugu icin bir obje olusturmak icin mutlaka bir yerde "new" anahtar kelimesi yazmak durumundasin. amam bu kullandigin paterne gore bir static factory method icinde bir defa yazarak da olur, ya da her bir obje olusturmak icin ayri ayri yazarak ta olur.
  • emrahday  (02.01.19 14:19:27 ~ 14:21:59) 
@emrahday

sayende gerçekten şimdi anladım galiba şöyle ki new operatörü ile sınıfın nesnesi oluşur bu şu demek
bu bellekte nereye kayıt edileceğini söyler.
constructor ise belleğe ne kaydedileceğini söyle ( String int vs.)
new operatörü ile nesne oluştuğunda constructor çağırır ve constructor'dakiler belleğe kaydedilir.

doğru mu anladım ?

teşekkür ediyorum gerçekten.
  • aristotelesin berberi  (02.01.19 15:43:20) 
evet aynen. biraz daha acayim;

class bir yemek kitabi tarifindeki yemek tarifi gibidir. yemegin nasil yapilacagini, icine neler konulacagini ve nasil hazilanacagini tanimlar. blueprint yani sablondur. o yemegi yaparken yani objeyi olustururken o objede ne olacak onu tanimlar.

constructor ise o tarifi ne katacaksin onu belirler. ornegin makarna tarfin (class makarna{}) olsun, simdi makarna yapacaksin ama neyli yapacaksin, iste o zaman constructor devreye girer. constructora bir malzeme katmayabilirsin (default constructor) ya da malzeme katabilirsin (makarna(string malzeme){}).

bir classdan obje uretmekde constructor yardimi ile olur. 'new' anahtari o class in constructorunu cagirmani saglar. ornegin makarna tarifini yazdin (class makarna), sonra o makarna tarifinde ister malzemeli ister malzemesiz constructor yazdin. artik makarna yapma vakti geldi.

Makarna sadeMakarna = new Makarna();

dediginde o makarna tarifini (class) default constructor ile calistirir ve makarnayi yapar. artik makarna hafizada yer kaplar. default oldugu icinde icine malzeme katmamisindir.

Makarna salcaliMakarna = new Makarna("salca");
Makarna peynirliMakarna = new Makarna("peynir");

ya da salcali ve peynirli malzemeli yapabilirsin, eger malzeme alan constructorun var ise. sade makarna icin java otomatik olusturur (default constructor). ama eger malzemeli yapacaksan senin tanimlaman gerekir (constructor overloading) elbette malzemeli makarna objesi hafizada biraz daha fazla yer kaplar. ve olusturdugun her bir obje yani sade, salcali ve peynirli makarna hafizada ayri ayri yer kaplar, yani birini degistirince digeri degismez, tamamen bagimsiz objelerdir ve ram uzerinde farkli hafiza bolumlerinde tutulur.
  • emrahday  (02.01.19 16:30:39 ~ 16:36:58) 
@emrahday

gerçekten çok açıklayıcı oldu artık tamamen anladım.
ben bu konuyu karıştırmamın sebebi class ismi ile oluşturulan constructor için de new operatörü ile oluşturulan default constructor içinde nesne oluşturur denmesiydi
ben de düşündüm ikisi de aynı işi yapıyor sa birini kullanmayalım dedim ve orada kafam karıştı
çok teşekkürler
bilginden ileri ki zamanlarda, ihtiyaç duyduğum da, uygun bulursan, ekşi sözlükten mesaj ile soru sorarak kullanmak isterim.
  • aristotelesin berberi  (03.01.19 06:53:07) 
[]

java ve kotlin

Efendim merhabalar sizlerin değerli bilgilerine ihtiyacım var sorum şudur java ile andorid uygulama yapmayı öğrenmeye başladım sonra kotlin diye bir şey olduğunu öğrendim şimdi ben kotline geçmek istemiyorum en azından java yı öğrendikten sonra kotline geçmek istiyorum peki ben java ile devam etsem yaptığım uygulamayı yayınlaya bilirmiyim yoksa google play ben artık kotlini destekliyorum uygulamanı kotlin ile yaz sonra yayınla diyebilir mi ?




 
efendim teşekkür ediyorum javaya devam edicem.


  • aristotelesin berberi  (05.12.18 16:26:45) 
Google 5 sene sonra bile Java'yi tamamen desteklemiyorum, sadece Kotlin (ya da @undertaker'in dedigi gibi Flutter) destekliyorum diyemez, derse kendi ayagina oyle boyle degil sikmis olur.

iOS tarafinda Swift baya hizli sekilde yayildi, kullanim orani oldukca artti. Ona ragmen cogu firmanin, ornegin Facebook'un bile codebase'inin %75'i hala Objective-C.

Java ogrenmeye devam +1. Orda tek sikinti Oracle ile yasadiklari copyright savaslari. Ona da bi cozum bulurlar.
  • elon  (05.12.18 19:50:57) 
Google hep bunu yapıyor önce dışardan bir tane hedeyi destekliyor sonra alternatifini sunup onu yüceltiyor. 2005 yılları civarında Google Adsense reklamlarında özel Mozilla Firefox reklamları vardı. Yani özel reklam bütçesinden Firefox'un indirilmesi için harcıyordu. Daha sonra Google Chrome geldikten sonra Firefox boykota uğradı desek yeridir. Şimdi aynısı java için de olup yavaş yavaş kotlin'e geçiş kaçınılmaz gibi.


  • goodz  (05.12.18 20:32:26) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.