2012-04-05 59 views
0

我使用ListView和懒惰适配器基于此link安卓:总是强制关闭

@fedor后这是我的第一个活动构建应用程序:

public class MenuViewAll extends ListActivity { 

// url to make request 
private static String url = "http://10.0.2.2/culigui/getdataresto.php"; 
//public static String TAG_NAME,TAG_ADDRESS; 
static final String KEY_ID = "id"; 
static final String KEY_NAME = "name"; 
static final String KEY_ADDRESS = "address"; 
static final String KEY_THUMB = "linkthumb"; 

ListView list; 
LazyAdapter adapter; 

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

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> userList = new ArrayList<HashMap<String, String>>(); 

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

    // getting JSON string from URL 
    JSONObject json = jParser.getJSONFromUrl(url); 

    try { 
     // Getting JSONArray of listresto 
     JSONArray listresto = json.getJSONArray("listresto"); 

     // looping through All listresto 
     for(int i = 0; i < listresto.length(); i++){ 
      HashMap<String, String> map = new HashMap<String, String>();  
      JSONObject list = listresto.getJSONObject(i); 


      // insert String to Local Variable 
      map.put(KEY_ID, list.getString("id_resto")); 
      map.put(KEY_NAME, list.getString("nama_resto")); 
      map.put(KEY_ADDRESS, list.getString("alamat_resto")); 
      map.put(KEY_THUMB, list.getString("thumb_img")); 
      userList.add(map); 


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


    /** 
    * Updating parsed JSON data into ListView 
    * */ 



    adapter = new LazyAdapter(this, userList); 
    list.setAdapter(adapter); 

    // ListView yourListView = getListView() 

}

,这里是我的懒适配器类:

public class LazyAdapter extends BaseAdapter { 

private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater=null; 
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return data.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View vi=convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.listitemviewall, null); 

    TextView namaresto = (TextView)vi.findViewById(R.id.name); // resto name 
    TextView alamatresto = (TextView)vi.findViewById(R.id.address); // resto address 
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.defaultthumb); // thumb image 

    HashMap<String, String> resto = new HashMap<String, String>(); 
    resto = data.get(position); 

    // Setting all values in listview 
    namaresto.setText(resto.get(MenuViewAll.KEY_NAME)); 
    alamatresto.setText(resto.get(MenuViewAll.KEY_ADDRESS)); 
    imageLoader.DisplayImage(resto.get(MenuViewAll.KEY_THUMB), thumb_image); 
    return vi; 
}} 

和我运行我的代码后,这里是logcat :

04-05 14:51:32.714: D/dalvikvm(311): GC_EXTERNAL_ALLOC freed 869 objects/60304 bytes in 76ms 
04-05 14:51:46.235: D/dalvikvm(311): GC_EXTERNAL_ALLOC freed 757 objects/43592 bytes in 362ms 
04-05 14:51:46.945: D/AndroidRuntime(311): Shutting down VM 
04-05 14:51:46.945: W/dalvikvm(311): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
04-05 14:51:46.975: E/AndroidRuntime(311): FATAL EXCEPTION: main 
04-05 14:51:46.975: E/AndroidRuntime(311): java.lang.RuntimeException: Unable to start activity ComponentInfo{last.project.CuliGUI/last.project.CuliGUI.MenuViewAll}: java.lang.NullPointerException 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.os.Looper.loop(Looper.java:123) 
04-05 14:51:46.975: E/AndroidRuntime(311): at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-05 14:51:46.975: E/AndroidRuntime(311): at java.lang.reflect.Method.invokeNative(Native Method) 
04-05 14:51:46.975: E/AndroidRuntime(311): at java.lang.reflect.Method.invoke(Method.java:521) 
04-05 14:51:46.975: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-05 14:51:46.975: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-05 14:51:46.975: E/AndroidRuntime(311): at dalvik.system.NativeStart.main(Native Method) 
04-05 14:51:46.975: E/AndroidRuntime(311): Caused by: java.lang.NullPointerException 
04-05 14:51:46.975: E/AndroidRuntime(311): at  last.project.CuliGUI.MenuViewAll.onCreate(MenuViewAll.java:102) 

我的程序总是强制关闭... 也许有人可以帮我...

+0

在MenuViewAll中告诉您的第102行 – 2012-04-05 10:10:18

回答

1

你应该注意这个错误部分:

04-05 14:51:46.975: E/AndroidRuntime(311): Caused by: java.lang.NullPointerException 
04-05 14:51:46.975: E/AndroidRuntime(311): at  last.project.CuliGUI.MenuViewAll.onCreate(MenuViewAll.java:102) 

,尤其是:

MenuViewAll.java:102 

这意味着在那一行的东西(我不会计算出l ines :))是NULL,但您尝试使用它。查找可能使用的对象NULL

示例(只是一个示例,因为我不知道它是什么行)。 可以说这行:

JSONObject list = listresto.getJSONObject(i); 

出于某种原因出错。 (没有JSONobjecti,listresto是错误的,我不知道)。再后来就这样:

 map.put(KEY_ID, list.getString("id_resto")); 

会给出一个空指针,因为你不能一个NULL对象上做getString

这样:

  • 找到行
  • 找对象
  • 修正原因为NULL,或者确保您处理它事先
  • ...
  • 利润
+0

谢谢@Nanne ...我得到我T ...我懒惰的适配器现在可以显示来自数据库的图像。 但存在另一个问题, 上的延迟适配器: namaresto.setText(resto.get(MenuViewAll.KEY_NAME)); alamatresto.setText(resto.get(MenuViewAll.KEY_ADDRESS)); imageLoader.DisplayImage(resto.get(MenuViewAll.KEY_THUMB),thumb_image); return vi; 上面的代码应该将MenuViewAll类中的KEY_NAME放到第一个textview,并将KEY_ADDRESS放到第二个textview中。但实际上,两个textview都显示KEY_THUMB ... 希望你能帮助我.again。 谢谢b4。 – 2012-04-09 03:23:01

+0

你最好为此提出另一个问题?会更容易。如果你在这里链接,我会看看,其他人也可以找到这个问题;) – Nanne 2012-04-09 08:43:16

+0

这里是我的新问题@Nanne的链接... 也许你可以去看看。谢谢b4。 http://stackoverflow.com/questions/10116280/textview-on-lazyadapter-display-wrong-data – 2012-04-12 01:35:02