دریافت اطلاعات از سرور و مخفی کردن 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 رو بعد از ۲ گذشت ۲ ثانیه مخفی میکنید . و اگر عدد برگشتی برابر ۱ باشد هیچ عملیاتی انجام نخواهد شد .

دانلود سورس پروژه

  1. علی رسالت - 5 اکتبر 2015

    بابا والله باید دمتون گرم گفت بهتون مطالب پولیم کنی باز خریدارتیم برادر مطلب کمه اما خیلی کم یابن
    ممنون

  2. علی رسالت - 5 اکتبر 2015

    شرمنده نظرم دو تا شد
    خواستم بگم به نظر من این جور اموزش ها خیلی بهتره و جدیدترن تا گذاشتن مثلا کد برگشت به صفحه قبل دیگه پره تو اینترنت
    یه قسمت بذارید واسه برنامه نویسی پیشرفته و مبتدی
    ممنون

  3. علی رسالت - 5 اکتبر 2015

    خطا داد لاگ E :
    http://uupload.ir/files/h8mi_2015-10-05_12-22-56.jpg
    که مربوط به این خط : send.setVisibility(View.INVISIBLE);
    موقع رفتن به اکتیویتی toast میاد و عدد رو نشون میده هم صفرش کردم هم ۱ در هر دو حالت دکمه سر جاش بود و در اخر خطای برنامه متوقف شد رو میده

  4. ali - 5 اکتبر 2015

    دسترسی به اینترنت رو در فایل AndroidManifest ایجاد کرده اید ؟

  5. علی رسالت - 5 اکتبر 2015

    بله اون مشکل و حل کردم مشکل از فایل سرور بود
    ولی هنوز نشون داده میشه
    مشکلی در ارتباط با دیتابیس نداره خیالتون راحت

  6. ali - 6 اکتبر 2015

    – پیام toast رو میتونید از فایل server.java پاک کنید .
    این پروژه بر روی API 19 طراحی شده و بدون مشکل کار میکند.
    هنوز با همان خطای http://uupload.ir/files/h8mi_2015-10-05_12-22-56.jpg مواجه هستید ؟

  7. علی رسالت - 6 اکتبر 2015

    نخیر اون خطا دیگه نشون داده نمیشه مشکل از من بود که دو تا فایل با اسم server داشتم که اینو به سرور ۲ تغییر دادم
    ارتباط الان با دیتابیس برقرار فقط مشکل فعلی من اینه که دکمه بازم نشون داده میشه
    مشکل api هم ندارم

  8. علی رسالت - 6 اکتبر 2015

    میشه خروجی و سورس رو بذارید واسه دانلود من دانلود کنم یه تستی کنم شاید یه چیزی دستگیرم شد

  9. ali - 10 اکتبر 2015

    سورس پروژه : http://blog.toobaweb.com/wp-content/uploads/2015/10/testProject.zip


همینک دیدگاه خود را برای ما بنویسید!