0

我正在从服务器检索图像 url 到我的应用程序,然后将图像 url 显示到 gridview 中。我设法检索 url 并存储到一个数组中,然后尝试显示图像,但我的应用程序崩溃了。

这是我的代码:

public class MainActivity extends Activity {

    GridView list;
    LazyAdapter adapter;
    String[] mString = new String [100];


 // Progress Dialog
    private ProgressDialog pDialog;

    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();

    // products JSONArray
    JSONArray images = null;

    ArrayList<HashMap<String, String>> photosList;

    // url to get all products list
    private static String url_all_photos = "http://10.0.2.2/android_connect/get_images.php";
    private static final String TAG_NAME = "photos";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_THUMBNAIL = "thumbnail_url";



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Loading products in Background Thread
        new LoadAllThumbnails().execute();

        list=(GridView)findViewById(R.id.list);
        adapter=new LazyAdapter(this, mString);
        list.setAdapter(adapter);

        Button b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(listener);
    }

    @Override
    public void onDestroy()
    {
        adapter.imageLoader.stopThread();
        list.setAdapter(null);
        super.onDestroy();
    }

    public OnClickListener listener=new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            adapter.imageLoader.clearCache();
            adapter.notifyDataSetChanged();
        }
    };

    /* private String[] mStrings={
            "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png",
            "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
            "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
            "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg"
    }; */

    /**
     * Background Async Task to Load all product by making HTTP Request
     * */
    class LoadAllThumbnails extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
         @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading" + "\n" + "Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        } 

        /**
         * getting All products from url
         * */
        protected String doInBackground(String... args) {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_photos, "GET", params);

            // Check your log cat for JSON reponse
            Log.d("All Products: ", json.toString());
            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // products found
                    // Getting Array of Products
                    images = json.getJSONArray(TAG_NAME);

                    // looping through All Products
                    for (int i = 0; i < images.length(); i++) {
                        JSONObject c = images.getJSONObject(i);

                        // Storing each json item in variable

                        String thumbnail = c.getString(TAG_THUMBNAIL);
                        Log.d("item Name:", thumbnail);
                        mString[0] = thumbnail;
                        Log.d("stored into array:", mString[0]);


                        //productsList.add(c.getString(TAG_COMPANY));

                        //Log.d("companyNAme", productsList.get(0));

                        //System.out.println(map);                  
                    }       

                } 
                else {

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

            return null;
        }


    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog after getting all products
        pDialog.dismiss();
    }
    }
}

这是我的 logcat 输出:

11-16 06:21:06.255: E/AndroidRuntime(727): FATAL EXCEPTION: Thread-9
11-16 06:21:06.255: E/AndroidRuntime(727): java.lang.NullPointerException
11-16 06:21:06.255: E/AndroidRuntime(727):  at com.example.lazygallery.FileCache.getFile(FileCache.java:22)
11-16 06:21:06.255: E/AndroidRuntime(727):  at com.example.lazygallery.ImageLoader.getBitmap(ImageLoader.java:65)
11-16 06:21:06.255: E/AndroidRuntime(727):  at com.example.lazygallery.ImageLoader.access$0(ImageLoader.java:63)
11-16 06:21:06.255: E/AndroidRuntime(727):  at com.example.lazygallery.ImageLoader$PhotosLoader.run(ImageLoader.java:170)
11-16 06:21:07.925: E/WindowManager(727): Activity com.example.lazygallery.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44eed438 that was originally added here
11-16 06:21:07.925: E/WindowManager(727): android.view.WindowLeaked: Activity com.example.lazygallery.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44eed438 that was originally added here
11-16 06:21:07.925: E/WindowManager(727):   at android.view.ViewRoot.<init>(ViewRoot.java:247)
11-16 06:21:07.925: E/WindowManager(727):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
11-16 06:21:07.925: E/WindowManager(727):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
11-16 06:21:07.925: E/WindowManager(727):   at android.view.Window$LocalWindowManager.addView(Window.java:424)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.Dialog.show(Dialog.java:241)
11-16 06:21:07.925: E/WindowManager(727):   at com.example.lazygallery.MainActivity$LoadAllThumbnails.onPreExecute(MainActivity.java:103)
11-16 06:21:07.925: E/WindowManager(727):   at android.os.AsyncTask.execute(AsyncTask.java:391)
11-16 06:21:07.925: E/WindowManager(727):   at com.example.lazygallery.MainActivity.onCreate(MainActivity.java:55)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-16 06:21:07.925: E/WindowManager(727):   at android.os.Handler.dispatchMessage(Handler.java:99)
11-16 06:21:07.925: E/WindowManager(727):   at android.os.Looper.loop(Looper.java:123)
11-16 06:21:07.925: E/WindowManager(727):   at android.app.ActivityThread.main(ActivityThread.java:4627)
11-16 06:21:07.925: E/WindowManager(727):   at java.lang.reflect.Method.invokeNative(Native Method)
11-16 06:21:07.925: E/WindowManager(727):   at java.lang.reflect.Method.invoke(Method.java:521)
11-16 06:21:07.925: E/WindowManager(727):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-16 06:21:07.925: E/WindowManager(727):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-16 06:21:07.925: E/WindowManager(727):   at dalvik.system.NativeStart.main(Native Method)
11-16 06:21:08.155: D/dalvikvm(727): GC_FOR_MALLOC freed 2773 objects / 202400 bytes in 59ms
11-16 06:21:09.255: D/All Products:(727): {"photos":[{"thumbnail_url":"http:\/\/profile.ak.fbcdn.net\/hprofile-ak-snc6\/260918_1534549431_2061261154_q.jpg"}],"success":1}
11-16 06:21:09.255: D/item Name:(727): http://profile.ak.fbcdn.net/hprofile-ak-snc6/260918_1534549431_2061261154_q.jpg
11-16 06:21:09.255: D/stored into array:(727): http://profile.ak.fbcdn.net/hprofile-ak-snc6/260918_1534549431_2061261154_q.jpg
4

2 回答 2

1

这是在 gridview、listview 和 pager 中显示图像的绝佳示例。看一下这个

https://github.com/nostra13/Android-Universal-Image-Loader

于 2012-11-16T06:50:06.173 回答
0

11-16 06:21:06.255: E/AndroidRuntime(727): java.lang.NullPointerException 11-16 06:21:06.255: E/AndroidRuntime(727): at com.example.lazygallery.FileCache.getFile(FileCache.爪哇:22)

那是你的问题。该文件的第 22 行引用了一个空引用。你没有发布那个文件,所以我们不能调试更多

于 2012-11-16T06:30:33.457 回答