如题:设断点运行两次成功,不设断点运行不成功!!帮忙看看到底出来时什么问题
package com.cooby;import java.util.ArrayList;import java.util.HashMap;import java.util.List;
import java.util.Map;import com.cooby.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;import android.widget.TextView;public class kccx extends Activity { ArrayList<String[]> alType = null;// 将所有对象存储在arraylist
ArrayList<HashMap<String, String>> mylist = null; MyConnector mc = null; // 网络连接器对象
ListView lv = null;
SpecialAdapter adapter = null;
Handler myhandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0: lv.setAdapter(adapter);
break;
}
super.handleMessage(msg); }
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kccx);
setTitle("库存查询");
getContact(); adapter = new SpecialAdapter(this, mylist, R.layout.kccx, new String[] {
"encode", "name", "pyin", "mun", "dwei" }, new int[] {
R.id.a07_ls_txtSNSRE, R.id.a07_ls_txtYNSE, R.id.a07_ls_txtSNSE,
R.id.a07_ls_txtXXSR, R.id.a07_ls_txtYF });
TextView t1 = new TextView(this);
t1.setText("产品编码");
t1.setBackgroundResource(R.drawable.kuang9);
TextView t2 = new TextView(this);
t2.setText("产品名称");
t2.setBackgroundResource(R.drawable.kuang9);
TextView t3 = new TextView(this);
t3.setText("产品简称");
t3.setBackgroundResource(R.drawable.kuang9);
TextView t4 = new TextView(this);
t4.setText("数量");
t4.setBackgroundResource(R.drawable.kuang9);
TextView t5 = new TextView(this);
t5.setText("单位");
t5.setBackgroundResource(R.drawable.kuang9);
LinearLayout linear = new LinearLayout(this);
linear.addView(t1, 79, 45);
linear.addView(t2, 100, 45);
linear.addView(t3, 80, 45);
linear.addView(t4, 80, 45);
linear.addView(t5, 60, 45); lv = new ListView(this); lv.setHorizontalScrollBarEnabled(true);
lv.addHeaderView(linear);// 设置listHeader 始终位于列表顶部 HorizontalScrollView hsv = new HorizontalScrollView(this);
hsv.addView(lv);
setContentView(hsv);

// lv.setAdapter(adapter); } public class SpecialAdapter extends SimpleAdapter {
private int[] colors = new int[] { 0x30FF0000, 0x300000FF }; public SpecialAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) { super(context, data, resource, from, to); } @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
int colorPos = position % colors.length;
if (colorPos == 1) {
view.setBackgroundColor(Color.argb(250, 255, 255, 255));
} else {
view.setBackgroundColor(Color.argb(250, 224, 243, 250));
}
return view;
}
} public void getContact() {
new Thread() {
public void run() {
try {
mc = new MyConnector("192.168.0.166", 9999); // 创建MyConnector对象
mc.dout.writeUTF("<#KCCX#>"); // 向服务器发出请求
int size = mc.din.readInt();// 读取列表的长度
alType = null;
alType = new ArrayList<String[]>(size);
mylist = null;
mylist = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < size; i++) { // 循环,获取每个信息
String fInfo = mc.din.readUTF();
String[] sa = fInfo.split("\\|");// 分割字符串
alType.add(sa);
int s = alType.size();
for (int j = 0; j < s; j++) {
String[] n = alType.get(j);
HashMap<String, String> map1 = new HashMap<String, String>(); map1.put("dwei", n[0]);
map1.put("mun", n[1]);
map1.put("pyin", n[3]);
map1.put("name", n[2]);
map1.put("encode", n[4]);
mylist.add(map1);
} } } catch (Exception e) {
e.printStackTrace(); } myhandler.sendEmptyMessage(0);
}
}.start(); } @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(kccx.this, CoobyDemo.class);
startActivity(intent);
}
return true; } @Override
protected void onDestroy() {
if (mc != null) {
mc.sayBye();
}
super.onDestroy();
}
}
我断点设置在 adapter = new SpecialAdapter(this, mylist, R.layout.kccx, new String[] 这里
谢谢了!!!!

解决方案 »

  1.   

    这个问题很简单,你的getContact()方法里新开了线程取mList:
    1.你没debug的时候,getContact()新开的线程还没有运行完,mList还没有取到,主线程就运行到adapter = new SpecialAdapter(this, mylist, R.layout.kccx, new String[]这一行了,所以必然会报错。2.你debug的时候,一步一步地走到打断点这一行,由于时间足够,所以mList取到了已经,所以不报错。建议:完全不用新开线程,在当前线程里写个方法到mList就好了;要不就取到mList以后回调。