Permalänk
Medlem

Visa bild android

Försöker skapa en app som kan ladda in en bild från en specifik url. Har kommit så långt att det funkar i emulatorn(2.2) men inte i telefonen (4.0.3). Någon som vet varför?

Har inte skrivit koden själv utan kopierat och modifierat. Har aldrig programmerat i android men har grundläggande kunskaper i java. Vet att com.bild.visa inte är ett bra namn. All hjälp uppskattas

layout

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/get_imagebt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Visa bild" android:layout_gravity="center" /> <ImageView android:id="@+id/imview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout>

MainActivity

package com.bild.visa; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Random; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { ImageView imView; String imageUrl="http://2.bp.blogspot.com/-4JD46Iw0Sas/TV14aYeZILI/AAAAAAAAAck..."; Random r= new Random(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_main); Button bt3= (Button)findViewById(R.id.get_imagebt); bt3.setOnClickListener(getImgListener); imView = (ImageView)findViewById(R.id.imview); } View.OnClickListener getImgListener = new View.OnClickListener() { @Override public void onClick(View view) { downloadFile(imageUrl); } }; Bitmap bmImg; void downloadFile(String fileUrl){ URL myFileUrl =null; try { myFileUrl= new URL(fileUrl); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bmImg = BitmapFactory.decodeStream(is); imView.setImageBitmap(bmImg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

och har lagt till <uses-permission android:name="android.permission.INTERNET"/> i AndroidManifest.xml

Permalänk
Medlem

Ha telefonen inkopplad och kolla i LogCat om den skriver ut något fel. Lägg till Log.e(String,String); i catch-blocken också^^

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk

Om du har grundläggande egenskaper i Java så bör du veta hur man felsöker... börja med det.

Permalänk
Medlem

Får upp appen men när jag trycker på visa bild laddar den och tillslut stoppas den.

Skrivet av Gnejs:

Ha telefonen inkopplad och kolla i LogCat om den skriver ut något fel. Lägg till Log.e(String,String); i catch-blocken också^^

Testade att lägga till Log.e(String,String); i catch-blocken men det var fel. Importerade android.util.Log;

När jag använde logcat fick jag inget (vet inte om jag gjorde rätt).

Ända som vart:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

Skrivet av Lullebulle:

Om du har grundläggande egenskaper i Java så bör du veta hur man felsöker... börja med det.

Har försökt men hittar inget fel, funkar som sagt på emulator fast annan android version.

Permalänk
Skrivet av mylife:

Får upp appen men när jag trycker på visa bild laddar den och tillslut stoppas den.

Testade att lägga till Log.e(String,String); i catch-blocken men det var fel. Importerade android.util.Log;

När jag använde logcat fick jag inget (vet inte om jag gjorde rätt).

Ända som vart:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

Har försökt men hittar inget fel, funkar som sagt på emulator fast annan android version.

https://developer.android.com/tools/debugging/index.html

Permalänk
Medlem
Skrivet av mylife:

Testade att lägga till Log.e(String,String); i catch-blocken men det var fel. Importerade android.util.Log;

Men det var fel?... -.- Sitter du och kodar i notepad eller? Om du inte ens lyckas lista ut vilka parametrar du kan ge loggern så kan du nog lägga ner ditt lilla projekt^^

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Men det var fel?... -.- Sitter du och kodar i notepad eller? Om du inte ens lyckas lista ut vilka parametrar du kan ge loggern så kan du nog lägga ner ditt lilla projekt^^

Fixat det nu.

Tror det beror på det här, försöker hitta en lösning. Tipsa om ni vet.

D/SntpClient( 59): request time failed: java.net.SocketException: Address family not supported by protocol

Edit: Testade med 4.0.3 emulator och då crashar appen direkt. Måste försöka hitta något som funkar för ICS.

Permalänk
Medlem

Konstigt fel, kan kanske vara för att du kör connect igen när du redan är ansluten. Men när du har löst det kommer du troligtvis få ett annat fel, du får inte ladda ner data på UI tråden från och med Android 4.0 (tror jag det var) utan du behöver göra det i en egen tråd. Skrev något väldigt liknande som du för bara någon vecka sedan och såhär ser min kod ut och den fungerar i Android 4.1. Den använder en AsyncTask för att göra nerladdningen i en egen tråd.

public class SweClockersDemo extends Activity { private Image _mainImage = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sweclockersdemo); _mainImage = (Image) findViewById(R.id.main_image); ImageUpdateTask task = new ImageUpdateTask(); task.execute(); } class ImageUpdateTask extends AsyncTask<Void, Void, Bitmap> { @Override protected Bitmap doInBackground(Void... params) { try { URL imageUrl = new URL("http://www.sweclockersdemo.se/demoimage.jpg"); return BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream()); } catch (MalformedURLException e) { Log.d("", "URL: " + e.getMessage()); e.printStackTrace(); } catch (IOException io) { Log.d("", "IO: " + io.getMessage()); io.printStackTrace(); } } @Override protected void onPostExecute(Bitmap result) { _mainImage.setImageBitmap(result); super.onPostExecute(result); } } }

/Viktor

Permalänk
Medlem
Skrivet av vg132:

Konstigt fel, kan kanske vara för att du kör connect igen när du redan är ansluten. Men när du har löst det kommer du troligtvis få ett annat fel, du får inte ladda ner data på UI tråden från och med Android 4.0 (tror jag det var) utan du behöver göra det i en egen tråd. Skrev något väldigt liknande som du för bara någon vecka sedan och såhär ser min kod ut och den fungerar i Android 4.1. Den använder en AsyncTask för att göra nerladdningen i en egen tråd.

public class SweClockersDemo extends Activity { private Image _mainImage = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sweclockersdemo); _mainImage = (Image) findViewById(R.id.main_image); ImageUpdateTask task = new ImageUpdateTask(); task.execute(); } class ImageUpdateTask extends AsyncTask<Void, Void, Bitmap> { @Override protected Bitmap doInBackground(Void... params) { try { URL imageUrl = new URL("http://www.sweclockersdemo.se/demoimage.jpg"); return BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream()); } catch (MalformedURLException e) { Log.d("", "URL: " + e.getMessage()); e.printStackTrace(); } catch (IOException io) { Log.d("", "IO: " + io.getMessage()); io.printStackTrace(); } } @Override protected void onPostExecute(Bitmap result) { _mainImage.setImageBitmap(result); super.onPostExecute(result); } } }

/Viktor

Tack! Detta fungerade kanon

Edit: Men vad ska man använda för att kunna zooma? Kan jag inte använda imageview då?

Permalänk
Skrivet av mylife:

Tack! Detta fungerade kanon

Edit: Men vad ska man använda för att kunna zooma? Kan jag inte använda imageview då?

Sök först... du är inte ensam om ditt "problem".
https://www.google.com/search?q=android+imageview+zoom

Permalänk
Medlem

Det borde funka om du laddar in bilden i en webview istället, så bör du få scrollning och zoom på köpet.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Det borde funka om du laddar in bilden i en webview istället, så bör du få scrollning och zoom på köpet.

Tackar. Det var mycket simplare och vart exakt som jag ville ha det.