Reputation: 71
I'm new to Android programming and could really use some help with a program I'm writing to establish a Http connection and display an image.
I'm using the 'Beginning Android Application Development' book by Wei-Meng Lee. The code compiles and there are no errors flagging up but every time I run the program the 'error connecting' message appears and no image is displayed.
I've looked at various samples of code for GET requests but can't find anything that works with my code.
Any help that anyone can offer would be greatly appreciated as I am struggling to see any solution so far.
The last line of code about uses-permission was included in the Manifest.
ImageView image;
private InputStream OpenHttpConnection(String urlString)
throws IOException {
InputStream in = null;
int response = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if(!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP Connection");
try {
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}
catch (Exception ex) {
throw new IOException("Error connecting");
}
return in;
}
private Bitmap DownloadImage(String URL) {
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in);
in.close();
}
catch (IOException e1) {
Toast.makeText(this, e1.getLocalizedMessage(), Toast.LENGTH_LONG).show();
e1.printStackTrace();
}
return bitmap;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
Bitmap bitmap = DownloadImage("http://www.mayoff.com/5-01cablecarDCP01934.jpg");
image = (ImageView) findViewById(R.id.image);
image.setImageBitmap(bitmap);
}
<uses-permission
android:name="android.permission.INTERNET" />
Upvotes: 4
Views: 2446
Reputation: 1774
Maybe problem is you having because of api version. you must use AsyncTask class for accessing web functions.
This may be related to the fact that in apis 11 and above accessing the net in Main thread is not allowed you may have to use ASYNC task.
example for using ASYNC task;
class InternetFileCheack extends AsyncTask<Object, Void, Boolean> {
private Button btn;
private String fileURL;
Context c;
public InternetFileCheack (Button imv, String url, Context ctx) {
this.btn = imv;
this.fileURL = url;
this.c = ctx;
}
@Override
protected Boolean doInBackground(Object... params) {
Boolean sonuc = null;
try {
URL u = new URL(fileURL);
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
huc.setRequestMethod("HEAD");
huc.connect();
int code = huc.getResponseCode();
if (code == HttpURLConnection.HTTP_OK) {
sonuc = true;
} else {
sonuc = false;
}
} catch (Exception e) {
sonuc = false;
}
return sonuc;
}
@Override
protected void onPostExecute(Boolean result) {
btn.setEnabled(result);
if (result) {
Toast.makeText(c, "", Toast.LENGTH_LONG).show();
btn.setVisibility(View.VISIBLE);
} else {
btn.setVisibility(View.GONE);
}
}
}
Upvotes: 2