Android:从线程中获取内容

Android:从线程中获取内容,android,multithreading,Android,Multithreading,我编写这段代码是为了从json解析器获取内容。第一次,我在onCreate()方法中使用了“listInfo=jp.info();”和“listContent=jp.content();”,但是这样,应用程序在加载时有延迟!因此,为了提高速度,我添加了runJP()方法,但现在我无法获取listInfo和listContent的内容!我该怎么办 private ArrayList<HashMap<String, String>> listInfo = new ArrayL

我编写这段代码是为了从json解析器获取内容。第一次,我在onCreate()方法中使用了“listInfo=jp.info();”和“listContent=jp.content();”,但是这样,应用程序在加载时有延迟!因此,为了提高速度,我添加了runJP()方法,但现在我无法获取listInfo和listContent的内容!我该怎么办

private ArrayList<HashMap<String, String>> listInfo = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, HashMap<Integer, String>>> listContent = new ArrayList<HashMap<String, HashMap<Integer, String>>>();
public JSONParser jp = new JSONParser();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);

    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    runJP();

    mapLocationOverlay = new MapLocationOverlay(this);
    mapView.getOverlays().add(mapLocationOverlay);
    mapView.invalidate();
}

private void runJP() {
    new Thread(new Runnable() {
        public void run() {
            listInfo = jp.info();
            listContent = jp.content();
        }
    }).start();
}
private ArrayList listInfo=new ArrayList();
private ArrayList listContent=new ArrayList();
public JSONParser jp=new JSONParser();
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
mapView=(mapView)findViewById(R.id.mapView);
mapView.SetBuilTinZoomControl(真);
runJP();
mapLocationOverlay=新的mapLocationOverlay(此);
mapView.getOverlays().add(mapLocationOverlay);
mapView.invalidate();
}
私有void runJP(){
新线程(newrunnable()){
公开募捐{
listInfo=jp.info();
listContent=jp.content();
}
}).start();
}
退房。正是为了这个目的

这允许您在另一个线程中运行代码,然后在完成时更新UI线程


.

使用将解析数据从线程发送到活动。在Runnable结束时,您可以创建一条消息,将该消息的对象设置为包含这两个对象的数组,然后您将在处理程序中收到该消息。

您还可以使用
.rununuithread(Runnable)
在UI线程上更新UI:

private void runJP() {
    new Thread(new Runnable() {
        public void run() {
            listInfo = jp.info();
            listContent = jp.content();
            // added
            YourActivity.this.runOnUiThread(new Runnable() {
                public void run() {
                    // here you can safely update the UI
                }
            });
        }
    }).start();
}

什么意思你不能接受listInfo和listContent的内容?为什么不呢?你的应用程序崩溃了吗?变量是否为空?如果异常正在崩溃,您可以发布它吗?你有没有仔细检查你的代码,看看runJP到底发生了什么?没有,应用程序没有崩溃!使用jsonparser,我从jsonarray中获取坐标和标题。使用runJP()方法,我无法从listInfo和listContent获取数据。如果listInfo和listContent在onCreate()方法中(没有线程),那么我获取数据!