0

my code is this :

package be.pressd.arrangementen;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
    Button fetch;
    EditText et;
    String aantalPersonen; 

    ArrayList<ArrangementInfo> arrangementenArray = new ArrayList<ArrangementInfo>();

    ArrangementInfo arrangement;

    private ListView lv;  
    private ArrayAdapter<String> listAdapter ; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fetch = (Button) findViewById(R.id.fetchButton);
        et = (EditText) findViewById(R.id.aantalPersonen);

        // Find the ListView resource.     
        lv = (ListView) findViewById(R.id.arrangementenLijst);   
        listAdapter = new ArrayAdapter<String>(this, R.layout.line_row);  

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String arrangement = (String) lv.getItemAtPosition(position);

                Intent i = new Intent(getApplicationContext(), ArrangementItem.class);

                i.putExtra("arrangement", arrangement);
                i.putExtra("minpers", arrangementenArray.get(position).getMinpers());
                i.putExtra("maxpers", arrangementenArray.get(position).getMaxpers());
                i.putExtra("prijs", arrangementenArray.get(position).getPrijs());
                i.putExtra("perpersoon", arrangementenArray.get(position).getPerPersoon());
                i.putExtra("uitleg", arrangementenArray.get(position).getUitleg());
                i.putExtra("extras", arrangementenArray.get(position).getExtras());
                startActivity(i);
            }

        });

        fetch.setOnClickListener(this);
    }

     public class ArrangementInfo{

        String naam, minpers, maxpers, prijs, perPersoon, uitleg, extras; //Create variables of your requirement.

        public String getNaam() {
            return naam;
        }

        public void setNaam(String naam) {
            this.naam = naam;
        }

        public String getMinpers() {
            return minpers;
        }

        public void setMinpers(String minpers) {
            this.minpers = minpers;
        }

        public String getMaxpers() {
            return maxpers;
        }

        public void setMaxpers(String maxpers) {
            this.maxpers = maxpers;
        }

        public String getPrijs() {
            return prijs;
        }

        public void setPrijs(String prijs) {
            this.prijs = prijs;
        }

        public String getPerPersoon() {
            return perPersoon;
        }

        public void setPerPersoon(String perPersoon) {
            this.perPersoon = perPersoon;
        }

        public String getUitleg() {
            return uitleg;
        }

        public void setUitleg(String uitleg) {
            this.uitleg = uitleg;
        }

        public String getExtras() {
            return extras;
        }

        public void setExtras(String extras) {
            this.extras = extras;
        }

     }

    class task extends AsyncTask<String, String, Void>
    {
        private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        InputStream is = null ;
        String result = "";


        protected void onPreExecute() {
            progressDialog.setMessage("Gegevens ophalen...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new OnCancelListener() {

                @Override
                public void onCancel(DialogInterface arg0) {
                    task.this.cancel(true);
                }
            });
        }

        @Override
        protected Void doInBackground(String... params) {

            String url_select = "http://mywebsite/myphpfile.php?aantpers=" + aantalPersonen;

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url_select);

            ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();

            try 
            {
                httpPost.setEntity(new UrlEncodedFormEntity(param));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                //read content
                is =  httpEntity.getContent();                  

            } catch (Exception e) {
                Log.e("log_tag", "Error in http connection "+e.toString());
            }

            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                StringBuilder sb = new StringBuilder();

                String line = "";

                while((line=br.readLine())!=null)
                {
                    sb.append(line+"\n");
                }

                is.close();
                result=sb.toString();               

            } catch (Exception e) {

                Log.e("log_tag", "Error converting result "+e.toString());
            }
            return null;
        }

        protected void onPostExecute(Void v) {

            try 
            {   listAdapter.clear();
                JSONArray Jarray = new JSONArray(result);

                arrangementenArray.clear();

                for(int i=0; i < Jarray.length(); i++)
                {
                    JSONObject arrangementObject = null;
                    arrangementObject = Jarray.getJSONObject(i);

                    arrangement = new ArrangementInfo();
                    arrangement.naam = arrangementObject.getString("naam");
                    arrangement.minpers = arrangementObject.getString("minpers");
                    arrangement.maxpers = arrangementObject.getString("maxpers");
                    arrangement.prijs = arrangementObject.getString("prijs");
                    arrangement.perPersoon = arrangementObject.getString("perpersoon");
                    arrangement.uitleg = arrangementObject.getString("uitleg");
                    arrangement.extras = arrangementObject.getString("extras");

                    arrangementenArray.add(arrangement);

                    listAdapter.add(arrangementObject.getString("naam"));
                }

                this.progressDialog.dismiss();

                lv.setAdapter( listAdapter);

            } catch (Exception e) {

                Log.e("log_tag", "Error parsing data "+e.toString());
            }
        }
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.fetchButton :

                aantalPersonen = et.getText().toString();
                if (aantalPersonen.trim().equals("")) {
                    Toast.makeText(this, "Gelieve het aantal personen in te geven", Toast.LENGTH_SHORT).show();
                    return;
                }
                else 
                {
                        new task().execute();
                        break;
                }       
        }
    }
}

I must be honest in that I found the code for the ASyncTask and so on the Internet. I noticed that if there's no network (wifi or 4G) available, the "fetching" part keeps on running running running.

I don't know how to cancel the task if no network was found and then also show it to the user.

Who can help ?

Greetings and thanks in advance,

Davy

Davy
  • 15
  • 1
  • 7

3 Answers3

0

A recommended approach would be to use Network libraries such as Volley or loopj async HTTP client.

Both of them has callback functions for successful network request, network failures, retries, etc. They are more efficient to manage networking than the basic apache HTTP client.

You can find constructive discussion on various networking libraries here

Community
  • 1
  • 1
Hungry Coder
  • 1,800
  • 17
  • 22
0

To test if no internet is currently active, i use this piece of code:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();

    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Moonbloom
  • 7,738
  • 3
  • 26
  • 38
0

You can also use a BroadcastReceiver and get notified when there's a change in connectivity. Such that when you suddenly loose connection, you can trigger an event (with something like GreenRobot), and cancel your AsyncTasks.

public class ConnectivityChangeReceiver extends BroadcastReceiver {
    @Override
    public void handleReceive(Context context, Intent intent) {
        NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetInfo == null) {
            EventBus.getDefault().post(new DisconnectEvent())
        }
    }
}
mbmc
  • 5,024
  • 5
  • 25
  • 53