My activity gets force closed when there is no internet connection.How do I prevent this? I am thinking of showing a message to the user that there is no internet connection if it is not connected.In which all ways should I change the code? Thanks in advance
public class Myclass extends BaseActivity {
private String[] imageUrls;
private DisplayImageOptions options;
private InputStream is;
private String result;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_image_grid);
imageUrls = new String[1000];
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(D.url+"gal.php");
List nameValuepairss = new ArrayList(1);
// adding attributes to List
nameValuepairss.add(new BasicNameValuePair("type","gal_living"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuepairss));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success username");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
Toast.makeText(getApplicationContext(), "fail1", Toast.LENGTH_SHORT).show();
}
//convert response to string
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();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result :::"+e.toString());
// Toast.makeText(getApplicationContext(), "fail1", Toast.LENGTH_SHORT).show();
}
try{
JSONArray jArray = new JSONArray(result);
int arrayLength=jArray.length();
final String url[]=new String[arrayLength];
for(int i=0;i<arrayLength;i++){
JSONObject json_data = jArray.getJSONObject(i);
url[i]=json_data.getString("url");
}
List<String> urls = new ArrayList<String>();
urls.addAll(Arrays.asList(url));
imageUrls = urls.toArray(new String[0]);
} catch(JSONException e){
Log.e("log_tag", "Error parsing data:::::again? "+e.toString());
} options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_image)
.showImageForEmptyUri(R.drawable.image_for_empty_url)
.cacheInMemory()
.cacheOnDisc()
.build();
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter());
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startImageGalleryActivity(position);
}
});
}
private void startImageGalleryActivity(int position) {
Intent intent = new Intent(this, ImagePagerActivity.class);
intent.putExtra(Extra.IMAGES, imageUrls);
intent.putExtra(Extra.IMAGE_POSITION, position);
startActivity(intent);
}
public class ImageAdapter extends BaseAdapter {
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ImageView imageView;
if (convertView == null) {
imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
} else {
imageView = (ImageView) convertView;
}
imageLoader.displayImage(imageUrls[position], imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(Bitmap loadedImage) {
Animation anim = AnimationUtils.loadAnimation(LivingGrid.this, R.anim.fade_in);
imageView.setAnimation(anim);
anim.start();
}
});
return imageView;
}}}
I think you can just put a return in the first catch clause. Because although you have caught Http Connection exception, the below code would still be executed. At that time, "is" is null, so reading from "is" would cause crash.
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(D.url+"gal.php");
List nameValuepairss = new ArrayList(1);
// adding attributes to List
nameValuepairss.add(new BasicNameValuePair("type","gal_living"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuepairss));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success username");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
Toast.makeText(getApplicationContext(), "fail1", Toast.LENGTH_SHORT).show();
return; // ADD return HERE!!!!!!!!!!!!
}