问题描述
- 关于list产生的问题 安卓 求大神帮助啊 已经摆弄了一天了 我已经确定问题在哪 却不知道为什么
- package com.wang.text;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.listener.FindListener;public class MainActivity extends Activity {
String IMAGE_URL = null;
private static final String TAG = null;
ImageView img;List<String> list = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageView) findViewById(R.id.imageone); Bmob.initialize(this9ce1856638d44a6cefdfb67f721d0127""); String newnew = geturl(1); list.add(newnew); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { public void onClick(View v) { testBmob(); } });}private String geturl(int k) { BmobQuery<Picture> query = new BmobQuery<Picture>(); query.addWhereEqualTo(""id"" k); query.findObjects(this new FindListener<Picture>() { @Override public void onError(int arg0 String arg1) { } @Override public void onSuccess(List<Picture> arg0) { Picture pics = arg0.get(0); BmobFile pic = pics.getPicture(); IMAGE_URL = pic.getFileUrl(MainActivity.this); } }); return IMAGE_URL;}private void testBmob() { String Image_dizhi = list.get(0); new DownloadImageTask().execute(Image_dizhi); /*new DownloadImageTask().execute(geturl(1));*/ //我的问题在这 为什么直接调用函数能显示图片,通过list保存url地址然后再取出后为什么安卓应用程序就停止运行了。}public void toast(String msg) { Toast.makeText(this msg Toast.LENGTH_SHORT).show(); Log.d(TAG msg);}class DownloadImageTask extends AsyncTask<String Void Drawable> { @Override protected Drawable doInBackground(String... urls) { // TODO Auto-generated method stub return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Drawable result) { img.setImageDrawable(result); } private Drawable loadImageFromNetwork(String imageUrl) { Drawable drawable = null; try { drawable = Drawable.createFromStream( new URL(imageUrl).openStream()image.jpg""); } catch (IOException e) { Log.d(""test"" e.getMessage()); } if (drawable == null) { Log.d(""test""null drawable""); } else { Log.d(""test""not null drawable""); } return drawable; }}
}
解决方案
你确定你的list里面是有值的吗?query.findObjects看上去明显是个异步的函数,在你没有取得IMAGE_URL值的时候,geturl(int k)方法就已经执行到了return IMAGE_URL;这一步了,所以估计你的错误就是空指针异常了,之后之所以执行正常,是因为你开始的时候执行了String newnew = geturl(1);这个方法,导致IMAGE_URL值已经存在了,不再为空!你可以自己调试下试试。断点设置在geturl()方法里面
解决方案二:
建议你先将 geturl(1) 通过 LOG 输出看看是不是你想要的结果。
解决方案三:
用handler吧,百度下