دریافت اطلاعات از سرور و مخفی کردن 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