Java 在android中为ImageView下载图像时出现NullPointerException

Java 在android中为ImageView下载图像时出现NullPointerException,java,android,Java,Android,我正试图为一个工作项目复习我的安卓系统,结果发现我比我最初想象的更加脱离现实 我正在创建一个将图片上传到远程服务器的应用程序,然后将这些上传的图片显示为缩略图 我正在努力的部分是下载图像并将其应用到列表视图中的图像视图 我收到一个空指针异常,这从来都不是好事 我不确定这是因为我启动了许多异步任务(每个图像一个),还是因为它更明显 堆栈跟踪 Process: com.example.alex.documentupload, PID: 5788 java.lang.NullPointerExcept

我正试图为一个工作项目复习我的安卓系统,结果发现我比我最初想象的更加脱离现实

我正在创建一个将图片上传到远程服务器的应用程序,然后将这些上传的图片显示为缩略图

我正在努力的部分是下载图像并将其应用到列表视图中的图像视图

我收到一个空指针异常,这从来都不是好事

我不确定这是因为我启动了许多异步任务(每个图像一个),还是因为它更明显

堆栈跟踪

Process: com.example.alex.documentupload, PID: 5788
java.lang.NullPointerException
        at com.example.alex.documentupload.DownloadImageTask.onPostExecute(DownloadImage.java:35)
        at com.example.alex.documentupload.DownloadImageTask.onPostExecute(DownloadImage.java:14)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5748)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
        at dalvik.system.NativeStart.main(Native Method)
安卓代码 显示图像类

package com.example.alex.documentupload;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.example.alex.documentupload.JSONParser;
import com.example.alex.documentupload.DownloadImageTask;

public class ShowImages extends Activity {
    ListView list;
    TextView ver;
    TextView name;
    TextView api;
    ImageView img;

    Button Btngetdata;
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();

    //URL to get JSON Array
    private static String url = "http://www.500kgiveaway.co.uk/getimagesmob.php";

    //JSON Node Names
    private static final String TAG_PATH = "path";

    JSONArray android = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_show_images);
        oslist = new ArrayList<HashMap<String, String>>();

        new JSONParse().execute();

        Btngetdata = (Button)findViewById(R.id.getdata);
        Btngetdata.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // clear the list before adding more

                //update the list
                new JSONParse().execute();

            }
        });

    }

    private class JSONParse extends AsyncTask<String, String, JSONArray> {
        private ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ver = (TextView)findViewById(R.id.vers);
            name = (TextView)findViewById(R.id.name);
            api = (TextView)findViewById(R.id.api);
            img = (ImageView)findViewById(R.id.img);


            pDialog = new ProgressDialog(ShowImages.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();

        }

        @Override
        protected JSONArray doInBackground(String... args) {

            JSONParser jParser = new JSONParser();

            // Getting JSON from URL
            JSONArray json = jParser.getJSONFromUrl(url);
            return json;
        }
        @Override
        protected void onPostExecute(JSONArray json) {
            pDialog.dismiss();
            try {
                // Getting JSON Array from URL


               android = json;


                for(int i = 0 ; i < android.length(); i++){

                    JSONObject c = android.getJSONObject(i);

                    // Storing  JSON item in a Variable
                    String path = c.getString(TAG_PATH);

                    // Adding value HashMap key => value

                    HashMap<String, String> map = new HashMap<String, String>();

                    map.put(TAG_PATH, path);

                    oslist.add(map);
                    list=(ListView)findViewById(R.id.list);



                    ListAdapter adapter = new SimpleAdapter(ShowImages.this, oslist,
                            R.layout.list_v,
                            new String[] { TAG_PATH }, new int[] {
                            R.id.vers});

                    list.setAdapter(adapter);

                    new DownloadImageTask((ImageView) list.findViewById(R.id.img))
                            .execute("http://www.500kgiveaway.co.uk/" + path);

//                    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//
//                        @Override
//                        public void onItemClick(AdapterView<?> parent, View view,
//                                                int position, long id) {
//                            Toast.makeText(ShowImages.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();


//                        }
//                    });

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }

    public void loadcamera(View view) {
        // Do something in response to button

        Intent myIntent = new Intent(ShowImages.this, MainActivity.class);
        myIntent.putExtra("dir", "BS"); //Optional parameters
        ShowImages.this.startActivity(myIntent);

    }

}
package com.example.alex.documentupload;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

import java.io.InputStream;

/**
 * Created by Alex on 03/05/2015.
 */
 class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}
package com.example.alex.documentupload;
导入java.util.ArrayList;
导入java.util.HashMap;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.simpledapter;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.example.alex.documentupload.JSONParser;
导入com.example.alex.documentupload.DownloadImageTask;
公共类ShowImages扩展活动{
列表视图列表;
文本视图版本;
文本视图名称;
TextView api;
图像视图img;
按钮Btngetdata;
ArrayList oslist=新的ArrayList();
//获取JSON数组的URL
专用静态字符串url=”http://www.500kgiveaway.co.uk/getimagesmob.php";
//JSON节点名称
私有静态最终字符串标记_PATH=“PATH”;
JSONArray-android=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u show\u图像);
oslist=newarraylist();
新建JSONParse().execute();
Btngetdata=(按钮)findviewbyd(R.id.getdata);
Btngetdata.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//在添加更多之前清除列表
//更新列表
新建JSONParse().execute();
}
});
}
私有类JSONParse扩展了异步任务{
私人对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
ver=(TextView)findViewById(R.id.vers);
name=(TextView)findViewById(R.id.name);
api=(TextView)findViewById(R.id.api);
img=(ImageView)findViewById(R.id.img);
pDialog=新建进度对话框(ShowImages.this);
setMessage(“获取数据…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护的JSONArray doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
//从URL获取JSON
JSONArray json=jParser.getJSONFromUrl(url);
返回json;
}
@凌驾
受保护的void onPostExecute(JSONArray json){
pDialog.disclose();
试一试{
//从URL获取JSON数组
android=json;
for(int i=0;ivalue
HashMap=newHashMap();
地图放置(标记路径,路径);
添加(地图);
list=(ListView)findViewById(R.id.list);
ListAdapter=new SimpleAdapter(ShowImages.this,oslist,
R.layout.list_v,
新字符串[]{TAG_PATH},新int[]{
R.id.vers});
list.setAdapter(适配器);
新下载的ImageTask((ImageView)list.findViewById(R.id.img))
.执行(”http://www.500kgiveaway.co.uk/“+路径);
//list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
//
//@覆盖
//public void onItemClick(AdapterView父级、视图、,
//内部位置,长id){
//Toast.makeText(showmages.this,“您在“+oslist.get(+position.get”(“name”)、Toast.LENGTH_SHORT.show()处单击过”;
//                        }
//                    });
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
公共void加载摄影机(视图){
//对按钮做些反应
Intent myIntent=新的Intent(showmages.this、MainActivity.class);
myIntent.putExtra(“dir”、“BS”);//可选参数
ShowImages.this.startActivity(myIntent);
}
}
下载图像类

package com.example.alex.documentupload;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.example.alex.documentupload.JSONParser;
import com.example.alex.documentupload.DownloadImageTask;

public class ShowImages extends Activity {
    ListView list;
    TextView ver;
    TextView name;
    TextView api;
    ImageView img;

    Button Btngetdata;
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();

    //URL to get JSON Array
    private static String url = "http://www.500kgiveaway.co.uk/getimagesmob.php";

    //JSON Node Names
    private static final String TAG_PATH = "path";

    JSONArray android = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_show_images);
        oslist = new ArrayList<HashMap<String, String>>();

        new JSONParse().execute();

        Btngetdata = (Button)findViewById(R.id.getdata);
        Btngetdata.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // clear the list before adding more

                //update the list
                new JSONParse().execute();

            }
        });

    }

    private class JSONParse extends AsyncTask<String, String, JSONArray> {
        private ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ver = (TextView)findViewById(R.id.vers);
            name = (TextView)findViewById(R.id.name);
            api = (TextView)findViewById(R.id.api);
            img = (ImageView)findViewById(R.id.img);


            pDialog = new ProgressDialog(ShowImages.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();

        }

        @Override
        protected JSONArray doInBackground(String... args) {

            JSONParser jParser = new JSONParser();

            // Getting JSON from URL
            JSONArray json = jParser.getJSONFromUrl(url);
            return json;
        }
        @Override
        protected void onPostExecute(JSONArray json) {
            pDialog.dismiss();
            try {
                // Getting JSON Array from URL


               android = json;


                for(int i = 0 ; i < android.length(); i++){

                    JSONObject c = android.getJSONObject(i);

                    // Storing  JSON item in a Variable
                    String path = c.getString(TAG_PATH);

                    // Adding value HashMap key => value

                    HashMap<String, String> map = new HashMap<String, String>();

                    map.put(TAG_PATH, path);

                    oslist.add(map);
                    list=(ListView)findViewById(R.id.list);



                    ListAdapter adapter = new SimpleAdapter(ShowImages.this, oslist,
                            R.layout.list_v,
                            new String[] { TAG_PATH }, new int[] {
                            R.id.vers});

                    list.setAdapter(adapter);

                    new DownloadImageTask((ImageView) list.findViewById(R.id.img))
                            .execute("http://www.500kgiveaway.co.uk/" + path);

//                    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//
//                        @Override
//                        public void onItemClick(AdapterView<?> parent, View view,
//                                                int position, long id) {
//                            Toast.makeText(ShowImages.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();


//                        }
//                    });

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }

    public void loadcamera(View view) {
        // Do something in response to button

        Intent myIntent = new Intent(ShowImages.this, MainActivity.class);
        myIntent.putExtra("dir", "BS"); //Optional parameters
        ShowImages.this.startActivity(myIntent);

    }

}
package com.example.alex.documentupload;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

import java.io.InputStream;

/**
 * Created by Alex on 03/05/2015.
 */
 class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}
package com.example.alex.documentupload;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.util.Log;
导入android.widget.ImageView;
导入java.io.InputStream;
/**
*由Alex于2015年5月3日创建。
*/
类DownloadImageTask扩展了AsyncTask{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon11=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();