Java 安卓图像下载

Java 安卓图像下载,java,android,image,url,download,Java,Android,Image,Url,Download,嗨,我需要从url下载图像,然后将该图像保存到我的android设备,但我在从url获取图像时遇到问题。这是我的密码。请帮忙。我已经附加了我的数据类以及我的主要活动类 package muneeb.muneeba; import android.graphics.*; import java.net.*; import java.io.*; public class Picture { public String url; public String description;

嗨,我需要从url下载图像,然后将该图像保存到我的android设备,但我在从url获取图像时遇到问题。这是我的密码。请帮忙。我已经附加了我的数据类以及我的主要活动类

package muneeb.muneeba;

import android.graphics.*;
import java.net.*;
import java.io.*;

public class Picture 
{
   public String url;
   public String description;
   public String category;

   public Picture(String url,String desc,String category){
  this.url = url;
  this.description = desc;
  this.category = category;
   }

   public Bitmap getImage(){

  Bitmap image = null;

  try {
     InputStream in = new URL(url).openStream();
     image = BitmapFactory.decodeStream(in);
  } catch (Exception e) {
     e.printStackTrace();
  }

  return image;
   }
}

package muneeb.muneeba;

import android.app.Activity;
import android.os.Bundle;
import java.net.*;
import java.util.*;
import java.io.*;
import android.widget.*;
import android.view.*;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;

public class WebPics extends Activity
{
ArrayList<Picture> pictures;
int position = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    load();
    show();
}

private void load(){

   String line = "";
   TextView view = (TextView) findViewById(R.id.text);

   try{

      URL url = new URL("https://dl.dropboxusercontent.com/u/47451150/pictures.xml");
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.setReadTimeout(10000);
      connection.setConnectTimeout(15000);
      connection.setRequestMethod("GET");
      connection.setDoInput(true);

      connection.connect();

      StringBuilder content = new StringBuilder();
      BufferedReader reader = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );


      while( (line = reader.readLine()) != null ){
         content.append(line);
      }

      line = content.toString();
      parse(line);
   } catch(Exception ex) {
      line = ex.getMessage();
      ex.printStackTrace();
   }

}

private void parse(String xml){

   String category = "";
   pictures = new ArrayList<Picture>();

   try{
      XmlPullParser parser = Xml.newPullParser();
      parser.setInput(new StringReader(xml));

      int event = parser.getEventType();
      while(event != XmlPullParser.END_DOCUMENT){

         if(event == XmlPullParser.START_TAG &&
             parser.getName().equals("category") ) {

            category = parser.getAttributeValue(null,"name");
         }

         if(event == XmlPullParser.START_TAG &&
             parser.getName().equals("im") ){

             String url = parser.getAttributeValue(null,"url");
             String description = parser.getAttributeValue(null,"description");
             pictures.add(new Picture(url,description,category));
         }

         event = parser.next();
      }
   } catch(Exception ex){ }
}

private void show(){
   if(pictures != null){
      Picture picture = pictures.get(position);
      if (picture == null) return;

      ImageView image = (ImageView) findViewById(R.id.image);
      image.setImageBitmap(picture.getImage());

      TextView text = (TextView) findViewById(R.id.text);
      text.setText("Category:" + picture.category + "\n" + picture.description);
   }
}

public void buttonClick(View view){
   if(view.getId() == R.id.previous ){
      position--;
      if (position < 0) position = pictures.size() - 1;
   }

   if(view.getId() == R.id.next )
{
      position = (position + 1) % pictures.size();
   }

   show();
}

}
包muneeb.muneeba;
导入android.graphics.*;
导入java.net。*;
导入java.io.*;
公开课图片
{
公共字符串url;
公共字符串描述;
公共字符串类别;
公共图片(字符串url、字符串描述、字符串类别){
this.url=url;
this.description=desc;
this.category=类别;
}
公共位图getImage(){
位图图像=空;
试一试{
InputStream in=新URL(URL).openStream();
image=BitmapFactory.decodeStream(in);
}捕获(例外e){
e、 printStackTrace();
}
返回图像;
}
}
包muneeb.muneeba;
导入android.app.Activity;
导入android.os.Bundle;
导入java.net。*;
导入java.util.*;
导入java.io.*;
导入android.widget.*;
导入android.view.*;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserException;
导入android.util.Xml;
公共类WebPics扩展活动
{
阵列列表图片;
int位置=0;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
加载();
show();
}
专用空心荷载(){
字符串行=”;
TextView=(TextView)findViewById(R.id.text);
试一试{
URL=新URL(“https://dl.dropboxusercontent.com/u/47451150/pictures.xml");
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setReadTimeout(10000);
连接。设置连接超时(15000);
connection.setRequestMethod(“GET”);
connection.setDoInput(true);
connection.connect();
StringBuilder内容=新建StringBuilder();
BufferedReader=new BufferedReader(new InputStreamReader(connection.getInputStream());
而((line=reader.readLine())!=null){
内容。追加(行);
}
line=content.toString();
解析(行);
}捕获(例外情况除外){
line=ex.getMessage();
例如printStackTrace();
}
}
私有void解析(字符串xml){
字符串类别=”;
图片=新的ArrayList();
试一试{
XmlPullParser=Xml.newPullParser();
setInput(新的StringReader(xml));
int event=parser.getEventType();
while(event!=XmlPullParser.END_文档){
if(event==XmlPullParser.START_标记&&
parser.getName().equals(“类别”)){
category=parser.getAttributeValue(null,“name”);
}
if(event==XmlPullParser.START_标记&&
parser.getName().equals(“im”)){
字符串url=parser.getAttributeValue(null,“url”);
String description=parser.getAttributeValue(null,“description”);
图片。添加(新图片(url、说明、类别));
}
event=parser.next();
}
}捕获(例外情况除外){}
}
私人电视节目(){
如果(图片!=null){
图片=图片。获取(位置);
if(picture==null)返回;
ImageView图像=(ImageView)findViewById(R.id.image);
setImageBitmap(picture.getImage());
TextView text=(TextView)findViewById(R.id.text);
text.setText(“类别:“+picture.Category+”\n“+picture.description”);
}
}
公共作废按钮单击(查看){
if(view.getId()==R.id.previous){
位置--;
如果(位置<0)位置=pictures.size()-1;
}
if(view.getId()==R.id.next)
{
位置=(位置+1)%pictures.size();
}
show();
}
}

您无法下载图片的原因是,您正在UI线程中发出网络请求,但该请求无法工作。 使用
Asynctask
或任何其他机制将所有网络请求置于非UI线程中,并在UI线程中更新ImageView。这样你就可以正确下载图片了。 这可能对你有帮助

解决方案-

无论您想在哪里下载图片

包muneeb.muneeba;
package muneeb.muneeba;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import java.net.*;
import java.util.*;
import java.io.*;
import android.widget.*;
import android.view.*;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;

public class WebPics extends Activity {
    ArrayList<Picture> pictures;
    int position = 0;
    Context c;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        c = this;
        new DownloadWebPageTask().execute();
    }

    private class DownloadWebPageTask extends AsyncTask<Void, Void, Bitmap> {
        @Override
        protected Bitmap doInBackground(Void... urls) {
            load();
            if(pictures == null) {
                return null;
            } else{
                Picture picture = pictures.get(position);
                if (picture == null)
                    return null;
                else
                    return picture.getImage();
            }
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(bitmap == null){
                //Show error
            } else{
                ImageView image = (ImageView) findViewById(R.id.image);
                image.setImageBitmap(bitmap);
            }
        }
    }
        private void load() {

            String line = "";
            TextView view = (TextView) findViewById(R.id.text);

            try {
                Toast.makeText(c, "hello", Toast.LENGTH_LONG).show();
                URL url = new URL("https://dl.dropboxusercontent.com/u/47451150/pictures.xml");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setReadTimeout(10000);
                connection.setConnectTimeout(15000);
                connection.setRequestMethod("GET");
                connection.setDoInput(true);

                connection.connect();

                StringBuilder content = new StringBuilder();
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));


                while ((line = reader.readLine()) != null) {
                    content.append(line);
                }

                line = content.toString();
                parse(line);
            } catch (Exception ex) {
                line = ex.getMessage();
                ex.printStackTrace();
            }

        }

        private void parse(String xml) {

            String category = "";
            pictures = new ArrayList<Picture>();

            try {
                XmlPullParser parser = Xml.newPullParser();
                parser.setInput(new StringReader(xml));

                int event = parser.getEventType();
                while (event != XmlPullParser.END_DOCUMENT) {

                    if (event == XmlPullParser.START_TAG &&
                            parser.getName().equals("category")) {

                        category = parser.getAttributeValue(null, "name");
                    }

                    if (event == XmlPullParser.START_TAG &&
                            parser.getName().equals("im")) {

                        String url = parser.getAttributeValue(null, "url");
                        Toast.makeText(c, "hello", Toast.LENGTH_LONG).show();
                        String description = parser.getAttributeValue(null, "description");
                        pictures.add(new Picture(url, description, category));
                    }

                    event = parser.next();
                }
            } catch (Exception ex) {
            }
        }

        public void buttonClick(View view) {
            if (view.getId() == R.id.previous) {
                position--;
                if (position < 0) position = pictures.size() - 1;
            }

            if (view.getId() == R.id.next) {
                position = (position + 1) % pictures.size();
            }
            show();
        }
    public void show() {
        if (pictures != null) {
            Picture picture = pictures.get(position);
            if (picture == null) return;

            ImageView image = (ImageView) findViewById(R.id.image);
            image.setImageBitmap(picture.getImage());

            TextView text = (TextView) findViewById(R.id.text);
            text.setText("Category:" + picture.category + "\n" + picture.description);
        }
    }
    }
导入android.app.Activity; 导入android.content.Context; 导入android.graphics.Bitmap; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入java.net。*; 导入java.util.*; 导入java.io.*; 导入android.widget.*; 导入android.view.*; 导入org.xmlpull.v1.XmlPullParser; 导入org.xmlpull.v1.XmlPullParserException; 导入android.util.Xml; 公共类WebPics扩展活动{ 阵列列表图片; int位置=0; 上下文c; /** *在首次创建活动时调用。 */ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); c=这个; 新建下载WebPagetAsk().execute(); } 私有类下载WebPagetTask扩展异步任务{ @凌驾 受保护位图doInBackground(无效…URL){ 加载(); 如果(图片==null){ 返回null; }否则{ 图片=图片。获取(位置); if(picture==null) 返回null; 其他的 返回picture.getImage(); } } @凌驾 受保护的void onPostExecute(位图){ onPostExecute(位图); 如果(位图==null){ //显示错误 }否则{ ImageView图像=(ImageView)findViewById(R.id.image); setImageBitmap(位图); } } } 专用空心荷载(){ 字符串行=”; TextView=(TextView)findViewById(R.id.text); 试一试{ Toast.makeText(c,“hello”,Toast.LENGTH_LONG).show(); URL=新URL(“
new DownloadWebPageTask().execute();
package muneeb.muneeba;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import java.net.*;
import java.util.*;
import java.io.*;
import android.widget.*;
import android.view.*;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;

public class WebPics extends Activity {
    ArrayList<Picture> pictures;
    int position = 0;
    Context c;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        c = this;
        new DownloadWebPageTask().execute();
    }

    private class DownloadWebPageTask extends AsyncTask<Void, Void, Bitmap> {
        @Override
        protected Bitmap doInBackground(Void... urls) {
            load();
            if(pictures == null) {
                return null;
            } else{
                Picture picture = pictures.get(position);
                if (picture == null)
                    return null;
                else
                    return picture.getImage();
            }
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(bitmap == null){
                //Show error
            } else{
                ImageView image = (ImageView) findViewById(R.id.image);
                image.setImageBitmap(bitmap);
            }
        }
    }
        private void load() {

            String line = "";
            TextView view = (TextView) findViewById(R.id.text);

            try {
                Toast.makeText(c, "hello", Toast.LENGTH_LONG).show();
                URL url = new URL("https://dl.dropboxusercontent.com/u/47451150/pictures.xml");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setReadTimeout(10000);
                connection.setConnectTimeout(15000);
                connection.setRequestMethod("GET");
                connection.setDoInput(true);

                connection.connect();

                StringBuilder content = new StringBuilder();
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));


                while ((line = reader.readLine()) != null) {
                    content.append(line);
                }

                line = content.toString();
                parse(line);
            } catch (Exception ex) {
                line = ex.getMessage();
                ex.printStackTrace();
            }

        }

        private void parse(String xml) {

            String category = "";
            pictures = new ArrayList<Picture>();

            try {
                XmlPullParser parser = Xml.newPullParser();
                parser.setInput(new StringReader(xml));

                int event = parser.getEventType();
                while (event != XmlPullParser.END_DOCUMENT) {

                    if (event == XmlPullParser.START_TAG &&
                            parser.getName().equals("category")) {

                        category = parser.getAttributeValue(null, "name");
                    }

                    if (event == XmlPullParser.START_TAG &&
                            parser.getName().equals("im")) {

                        String url = parser.getAttributeValue(null, "url");
                        Toast.makeText(c, "hello", Toast.LENGTH_LONG).show();
                        String description = parser.getAttributeValue(null, "description");
                        pictures.add(new Picture(url, description, category));
                    }

                    event = parser.next();
                }
            } catch (Exception ex) {
            }
        }

        public void buttonClick(View view) {
            if (view.getId() == R.id.previous) {
                position--;
                if (position < 0) position = pictures.size() - 1;
            }

            if (view.getId() == R.id.next) {
                position = (position + 1) % pictures.size();
            }
            show();
        }
    public void show() {
        if (pictures != null) {
            Picture picture = pictures.get(position);
            if (picture == null) return;

            ImageView image = (ImageView) findViewById(R.id.image);
            image.setImageBitmap(picture.getImage());

            TextView text = (TextView) findViewById(R.id.text);
            text.setText("Category:" + picture.category + "\n" + picture.description);
        }
    }
    }
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="muneeb.muneeba" >

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >
    <uses-permission android:name="android.permission.INTERNET" />
    <activity android:name=".WebPics"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>