我正在从服务器检索图像 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