دریافت اطلاعات از سرور و مخفی کردن Button در آندروید
سوال : فرض کنید یه هاست دارم که تو دیتابیسش یه جدول و رکورد دارم که توش یه عدد هست مثلا ۱حالا از اون طرف تو برنامه اندرویدم یه دکمه دارم که وصل به این دیتابیسم حالا کارش چیه میخوام وقتی عدد ۱ بود تو دیتابیس این نشون داده بشه ولی کردمش ۰ دیگه دکمه نشون داده نشه .
پاسخ : در ادامه مثال ساده ای رو میتوانید ببینید :
فایل PHP :
<?php $con = mysql_connect('localhost','root',''); mysql_select_db('contact_us',$con); mysql_query("SET NAMES 'utf8'"); if($_GET['update'] == "yes"){ $query = mysql_query("SELECT * FROM messages WHERE id=1 AND name=0"); $result = mysql_num_rows($query); if($result){ echo 0; }else{ echo 1; } }else{ echo "فیلدها را به دقت تکمیل کنید."; } ?>
فایل main.xml :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".Main"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="دریافت آپدیت" android:id="@+id/button" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="24dp" /> </RelativeLayout>
فایل Main.java :
package co.tooba.testproject; import android.app.Activity; import android.os.Handler; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Main extends Activity { private Button send; private String url; public static String result = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); send = (Button)findViewById(R.id.button); url = "http://192.168.0.152/test.php?update=yes"; Server db = new Server(Main.this, url); db.execute(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { if(result.equals("0")){ send.setVisibility(View.INVISIBLE); } } }, ۲۰۰۰); } }
فایل Server.java :
package co.tooba.testproject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; public class Server extends AsyncTask<String, String, String> { private ProgressDialog dialog ; private Context myContext; private InputStream data = null; private String url ; public Server (Context context , String Url){ myContext = context; url = Url; } @Override protected void onPreExecute() { super.onPreExecute(); dialog = new ProgressDialog(myContext); dialog.setTitle("ارتباط با سرو"); dialog.setMessage("در حال ارسال اطلاعات ..."); dialog.setIndeterminate(false); dialog.setCancelable(true); dialog.show(); } @Override protected String doInBackground(String... arg0) { try { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); data = entity.getContent(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader( new InputStreamReader(data , "UTF-8"), 8); StringBuilder sb = new StringBuilder(); String row = null; if((row = reader.readLine()) != null){ Main.result = row; } data.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return Main.result; } @Override protected void onPostExecute(String output) { dialog.dismiss(); try { Toast.makeText(myContext, Main.result, Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); } } }
۱ – در لاین ۲۱ فایل Main.java آدرس سایت خودتون رو قرار بدید .
۲ – در لاین ۲۸ فایل Main مشخص کرده ایم که اگر عدد دریافتی از فایل PHP برابر ۰ بود Button رو بعد از ۲ گذشت ۲ ثانیه مخفی میکنید . و اگر عدد برگشتی برابر ۱ باشد هیچ عملیاتی انجام نخواهد شد .
دانلود سورس پروژه
-
علی رسالت - 5 اکتبر 2015
بابا والله باید دمتون گرم گفت بهتون مطالب پولیم کنی باز خریدارتیم برادر مطلب کمه اما خیلی کم یابن
ممنون -
علی رسالت - 5 اکتبر 2015
شرمنده نظرم دو تا شد
خواستم بگم به نظر من این جور اموزش ها خیلی بهتره و جدیدترن تا گذاشتن مثلا کد برگشت به صفحه قبل دیگه پره تو اینترنت
یه قسمت بذارید واسه برنامه نویسی پیشرفته و مبتدی
ممنون -
علی رسالت - 5 اکتبر 2015
خطا داد لاگ E :
http://uupload.ir/files/h8mi_2015-10-05_12-22-56.jpg
که مربوط به این خط : send.setVisibility(View.INVISIBLE);
موقع رفتن به اکتیویتی toast میاد و عدد رو نشون میده هم صفرش کردم هم ۱ در هر دو حالت دکمه سر جاش بود و در اخر خطای برنامه متوقف شد رو میده -
ali - 5 اکتبر 2015
دسترسی به اینترنت رو در فایل AndroidManifest ایجاد کرده اید ؟
-
علی رسالت - 5 اکتبر 2015
بله اون مشکل و حل کردم مشکل از فایل سرور بود
ولی هنوز نشون داده میشه
مشکلی در ارتباط با دیتابیس نداره خیالتون راحت -
ali - 6 اکتبر 2015
– پیام toast رو میتونید از فایل server.java پاک کنید .
این پروژه بر روی API 19 طراحی شده و بدون مشکل کار میکند.
هنوز با همان خطای http://uupload.ir/files/h8mi_2015-10-05_12-22-56.jpg مواجه هستید ؟ -
علی رسالت - 6 اکتبر 2015
نخیر اون خطا دیگه نشون داده نمیشه مشکل از من بود که دو تا فایل با اسم server داشتم که اینو به سرور ۲ تغییر دادم
ارتباط الان با دیتابیس برقرار فقط مشکل فعلی من اینه که دکمه بازم نشون داده میشه
مشکل api هم ندارم -
علی رسالت - 6 اکتبر 2015
میشه خروجی و سورس رو بذارید واسه دانلود من دانلود کنم یه تستی کنم شاید یه چیزی دستگیرم شد
-
ali - 10 اکتبر 2015
سورس پروژه : http://blog.toobaweb.com/wp-content/uploads/2015/10/testProject.zip