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