habibn

دو مشکل در کد برنامه نویسی اندروید

4 ارسال در این موضوع قرار دارد

سلام دوستان من در کد زیر دو مشکل دارم

در کلاس onCreate

می خواهم دستور new NetCheck().execute(); اجرا بشه و وقتی کلا تموم شد ادامه دستورات کلاس onCreate رو ادامه بده

در حال حاضر به محص وارد شدن به این اکتیوتی دیالوگ باز شده در حالیکه هنوز کار کلاس های دیگه به پایان نرسیده

برای حل این مشکل چیکار کنم

سوال دومی در مورد اینه که موقعی که به هر دلیلی ارتباط به سرور وصل نشه برنامه ارور فرست کلوز رو میده چطور این باگ رو برطرف کنم با تشکر:

کد

[shcode=java]

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

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.Activity;

import android.app.Dialog;

import android.app.ProgressDialog;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager.NameNotFoundException;

import android.graphics.drawable.ColorDrawable;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import android.os.AsyncTask;

import android.os.Bundle;

import android.os.Handler;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

public class ViewAllPersons extends Activity {

    String version ="";

    String versionold ="";

     ProgressDialog barProgressDialog;

   

             Handler updateBarHandler;

float oldverision;

float newversion;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                setContentView(R.layout.view_all_persons);

              

                new NetCheck().execute();

               

                try {// get version app

                    PackageInfo pInfo;

                    pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);

                   

                     version = pInfo.versionName;

                } catch (NameNotFoundException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            //    Toast.makeText(getApplicationContext(), version, 4000).show();

             //=============================================================================================

            newversion=Float.parseFloat(version);

            SaveID saveID = new SaveID(getApplicationContext());

            String ID = saveID.getState();

            Toast.makeText(getApplicationContext(), ID, 4000).show();

            if(oldverision==newversion){// where  version old by version old by if

                   

                    Toast.makeText(getApplicationContext(), "شما اخرین نسخه از برنامه رو دارید", 4000).show();

                }else if(oldverision

                   

                    Toast.makeText(getApplicationContext(), "شما باید برنامه رو بروز رسانی کنید", 4000).show();

final Dialog dialog =new Dialog(this);

dialog.setContentView(R.layout.custom);

dialog.setTitle("بروز رسانی ");

TextView text =(TextView)dialog.findViewById(R.id.text);

text.setText("برای بروز رسانی برنامه روی دکمه کلیک کنید");

ImageView image=(ImageView)dialog.findViewById(R.id.image);

image.setImageResource(R.drawable.ic_launcher);

Button dialogButton=(Button)dialog.findViewById(R.id.dialogButtonOK);

dialogButton.setOnClickListener(new OnClickListener() {

   

   

   

    @Override

    public void onClick(View arg0) {

        dialog.dismiss();

        updateBarHandler = new Handler();

       

    }

});

dialog.show();

                   

                }

               

               

               

        }

        /**

         * Async Task to check whether internet connection is working.

         **/

            private class NetCheck extends AsyncTask

            {

                private ProgressDialog nDialog;

                @Override

                protected void onPreExecute(){

                    super.onPreExecute();

                    nDialog = new ProgressDialog(ViewAllPersons.this);

                    nDialog.setTitle("Checking Network");

                    nDialog.setMessage("Loading..");

                    nDialog.setIndeterminate(false);

                    nDialog.setCancelable(true);

                    nDialog.show();

                }

                /**

                 * Gets current device state and checks for working internet connection by trying Google.

                **/

                @Override

                protected Boolean doInBackground(String... args){

                    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

                    NetworkInfo netInfo = cm.getActiveNetworkInfo();

                    if (netInfo != null && netInfo.isConnected()) {

                        try {

                            URL url = new URL("http://www.google.com");

                            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();

                            urlc.setConnectTimeout(3000);

                            urlc.connect();

                            if (urlc.getResponseCode() == 200) {

                                return true;

                            }

                        } catch (MalformedURLException e1) {

                            // TODO Auto-generated catch block

                            e1.printStackTrace();

                        } catch (IOException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                        }

                    }

                    return false;

                }

                @Override

                protected void onPostExecute(Boolean th){

                    if(th == true){

                        nDialog.dismiss();

                        new GetData().execute();

                    }

                    else{

                        nDialog.dismiss();

                        Toast.makeText(getApplicationContext(), "Error in Network Connection", Toast.LENGTH_SHORT).show();

                    }

                }

            }

          

          

            /**

             * Async Task to get data from URL

             **/

            private class GetData extends AsyncTask {

                private ProgressDialog pDialog;

                private InputStream is = null;

                private String url = "http://shoptablets.ir/app.php";

                private String page_output = "";

                @Override

                protected void onPreExecute() {

                    super.onPreExecute();

                    pDialog = new ProgressDialog(ViewAllPersons.this);

                    pDialog.setTitle("Contacting Servers");

                    pDialog.setMessage("Logging in ...");

                    pDialog.setIndeterminate(false);

                    pDialog.setCancelable(true);

                    pDialog.show();

                }

                @Override

                protected String doInBackground(String... args) {

                        try {

                        // defaultHttpClient

                        DefaultHttpClient httpClient = new DefaultHttpClient();

                        HttpGet httpGet = new HttpGet(url);

                        HttpResponse httpResponse = httpClient.execute(httpGet);

                        HttpEntity httpEntity = httpResponse.getEntity();

                        is = httpEntity.getContent();

                    } catch (UnsupportedEncodingException e) {

                        e.printStackTrace();

                    } catch (ClientProtocolException e) {

                        e.printStackTrace();

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                    try {

                        BufferedReader reader = new BufferedReader(new InputStreamReader(

                                is, "iso-8859-1"), 8);

                        StringBuilder sb = new StringBuilder();

                        String line = null;

                        while ((line = reader.readLine()) != null) {

                            sb.append(line + "\n");

                        }

                        is.close();

                        page_output = sb.toString();

                    } catch (Exception e) {

                        Log.e("Buffer Error", "Error converting result " + e.toString());

                    }

                  

                    versionold=page_output;

                    oldverision=Float.parseFloat(versionold);

                    SaveID saveID = new SaveID(getApplicationContext());

                    String ID = page_output.toString();

                    saveID.saveState(ID);

                    return page_output;

                }

                @Override

                protected void onPostExecute(String page_output) {

                        pDialog.dismiss();

                    try {

                        // display output of internet page (page_output string)

                        TextView tv = (TextView) findViewById(R.id.textView1);

                        tv.setText(page_output);

                       

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

               }

            }

            public void launchRingDialog(View view) {

                final ProgressDialog ringProgressDialog = ProgressDialog.show(ViewAllPersons.this, "Please wait ...",    "Downloading Image ...", true);

                ringProgressDialog.setCancelable(true);

                new Thread(new Runnable() {

                    @Override

                    public void run() {

                        try {

                            // Here you should write your time consuming task...

                            // Let the progress ring for 10 seconds...

                            Thread.sleep(10000);

                        } catch (Exception e) {

                        }

                        ringProgressDialog.dismiss();

                    }

                }).start();

            }

            public void launchBarDialog(View view) {

                barProgressDialog = new ProgressDialog(ViewAllPersons.this);

                barProgressDialog.setContentView(R.layout.downloaddialog);

                barProgressDialog.setTitle("Downloading Image ...");

                barProgressDialog.setMessage("Download in progress ...");

                barProgressDialog.setProgressStyle(barProgressDialog.STYLE_HORIZONTAL);

                barProgressDialog.setProgress(0);

                barProgressDialog.setMax(20);

                barProgressDialog.show();

                new Thread(new Runnable() {

                    @Override

                    public void run() {

                        try {

                            // Here you should write your time consuming task...

                            while (barProgressDialog.getProgress() <= barProgressDialog.getMax()) {

                                Thread.sleep(2000);

                                updateBarHandler.post(new Runnable() {

                                    public void run() {

                                        barProgressDialog.incrementProgressBy(2);

                                      }

                                  });

                                if (barProgressDialog.getProgress() == barProgressDialog.getMax()) {

                                    barProgressDialog.dismiss();

                                }

                            }

                        } catch (Exception e) {

                        }

                    }

                }).start();

            }

            public class SaveID {

                private Context m_Context;

                public int m_state;

                public static final String STATE_id = "id";

                public static final String MyPREFERENCES = "Save_ID";

                public SharedPreferences m_SharedPreferences;

                 public SaveID(Context context) {

                    // TODO Auto-generated constructor stub

                     this.m_Context=context;

                     m_SharedPreferences=m_Context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

                }

               

                public SaveID(Context context, SharedPreferences sharedPreferences) {

                    this.m_Context = context;

                    this.m_SharedPreferences = sharedPreferences;

                }

               

                public void setSharedPreferances(SharedPreferences sharedPreferences){

                    this.m_SharedPreferences = sharedPreferences;

                }

               

                public void saveState(String m_state){

                   

                    Editor editor = this.m_SharedPreferences.edit();

                    editor.putString(STATE_id, m_state);

                    editor.commit();

                }

                public String getState(){

                    return this.m_SharedPreferences.getString(STATE_id, "");

                }

}}

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سوال یک دلیلش اینه که برای چک کردن اینترنت داری از کلاس Asynctask استفاده میکنی ، این کلاس یک کار رو در حالی که کارهای دیگه در حال انجامه ، انجام میده ، برای چک کردن اینترنت از این کد استفاده کن :

[shcode=java]    private boolean isNetworkConnected() {

        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo netInfoMob = cm.getNetworkInfo(cm.TYPE_MOBILE);

        NetworkInfo netInfoWifi = cm.getNetworkInfo(cm.TYPE_WIFI);

        if ((netInfoMob != null || netInfoWifi != null) && (netInfoMob.isConnected() ||

                netInfoWifi.isConnected())) {

            return true;

        }

        return false;

    }[/shcode]

در مورد سوال دومت کدت رو توی try-catch بذاری دیگه پیام خطا نمیده ، اما راه بهتر اینه که از همین تابعی که برات گذاشتم استفاده کنی ، به این شکل که اگر نتیجه تابع true بود کاری رو انجام بده ، اگر نه یه پیام خطا نشون بده که به انترنت متصل نیستید ، به این شکل :

[shcode=java]                if(isNetworkConnected()) {

                        //انجام کار

                }else {

                         //خطای دسترسی به اینترنت

                }[/shcode]

نکته آخر اینکه برای اجرا شدن این کدها نیاز به دسترسی لازم داخل فایل AndroidManifest.xml داری :

   

   

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با تشکر از پاسخ خوبتون الان مشکل رو فهمیدم چیه اگر در کد زیر من url رو ادرس اشتباه وارد کنم برنامه ارور فورس کلوز میده

با اینکه خود کد try cath داره این قسمت رو چطور تغییر بدهم

قسمتی که از url استفاده می شه یعنی بعد از این دستور:

       protected String doInBackground(String... args) {

[shcode=java]

 private class GetData extends AsyncTask {

                private ProgressDialog pDialog;

                private InputStream is = null;

                private String url = "http://shoptablets.ir/app.php";

                private String page_output = "";

                @Override

                protected void onPreExecute() {

                    super.onPreExecute();

                    pDialog = new ProgressDialog(ViewAllPersons.this);

                    pDialog.setTitle("در حال اتصال به سرور سایت ");

                    pDialog.setMessage("در حال چک کردن ورژن برنامه شما با اخرین نسخه موجود در سرور ...");

                    pDialog.setIndeterminate(false);

                    pDialog.setCancelable(true);

                    pDialog.show();

                }

                @Override

                protected String doInBackground(String... args) {

                        try {

                        // defaultHttpClient

                        DefaultHttpClient httpClient = new DefaultHttpClient();

                        HttpGet httpGet = new HttpGet(url);

                        HttpResponse httpResponse = httpClient.execute(httpGet);

                        HttpEntity httpEntity = httpResponse.getEntity();

                        is = httpEntity.getContent();

                    } catch (UnsupportedEncodingException e) {

                        e.printStackTrace();

                    } catch (ClientProtocolException e) {

                        e.printStackTrace();

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                    try {

                        BufferedReader reader = new BufferedReader(new InputStreamReader(

                                is, "iso-8859-1"), 8);

                        StringBuilder sb = new StringBuilder();

                        String line = null;

                        while ((line = reader.readLine()) != null) {

                            sb.append(line + "\n");

                        }

                        is.close();

                        page_output = sb.toString();

                        versionnew=page_output;

                        result(versionnew);

                    } catch (Exception e) {

                        Log.e("Buffer Error", "Error converting result " + e.toString());

                    }

                  

            

            /*        SaveID saveID = new SaveID(getApplicationContext());

                    String ID = page_output.toString();

                    saveID.saveState(ID);*/

                    return page_output;

                }

                @Override

                protected void onPostExecute(String page_output) {

                        pDialog.dismiss();

                    try {

                        // display output of internet page (page_output string)

                        TextView tv = (TextView) findViewById(R.id.textView1);

                        tv.setText("جدیدترین نسخه موجود در سرور : "+page_output+'\n'+

                                "ورژن برنامه شما :"+oldverision);

                       

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

               }

            }

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

وقتی برای استثناهای مختلف برنامه خاصی نداری بهتره یک try-catch کلی بذاری که کل کدت رو در بر میگیره ، الان توی قسمت دریافت url سه تا کنترل کننده استثنا گذاشتی که اولا بعضیهاش ربطی به اون قسمت نداره (مثل IOException) ، بعدشم هر استثنایی خارج از اون سه موضوع رخ بده کنترل نمیشه و برنامه فورس کلوز میده ، بهترین کار اینه که از کلاس کلی استثناها (Exception) برای کنترل کل کدت استفاده کنی مگر اینکه بخوای به ازای هر نوع استثنا خاص یه عمل خاص انجام بدی ، کد زیر رو ببین :

[shcode=java]              try {

                        // defaultHttpClient

                        DefaultHttpClient httpClient = new DefaultHttpClient();

                        HttpGet httpGet = new HttpGet(url);

                        HttpResponse httpResponse = httpClient.execute(httpGet);

                        HttpEntity httpEntity = httpResponse.getEntity();

                        is = httpEntity.getContent();

                        //////////////////////////////////////////////////////////////////////////////////////////////////

                        BufferedReader reader = new BufferedReader(new InputStreamReader(

                                is, "iso-8859-1"), 8);

                        StringBuilder sb = new StringBuilder();

                        String line = null;

                        while ((line = reader.readLine()) != null) {

                            sb.append(line + "\n");

                        }

                        is.close();

                        page_output = sb.toString();

                        versionnew=page_output;

                        result(versionnew);

 

                    } catch (Exception e) {

                        Log.e("Buffer Error", "Error converting result " + e.toString());

                    }

                   

             

            /*        SaveID saveID = new SaveID(getApplicationContext());

                    String ID = page_output.toString();

                    saveID.saveState(ID);*/

                    return page_output;

                }[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری