如何将对象从Android中的另一个线程传回主线程?

时间:2016-09-21 09:01:52

标签: java android multithreading

我有一个片段,我在其中启动线程。在这个线程中,我得到一个对象,之后我想将对象传递给主线程。我该怎么做?

public class IFragment extends Fragment     { 
private void getRecentlyTag(){

    new Thread(){
        @Override
        public void run() {
            HttpURLConnection urlConnection = null;
            try {
                URL url = new URL(Constants.API_URL);
                urlConnection = (HttpURLConnection) url
                        .openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.setDoInput(true);
                urlConnection.connect();
                String response = Tools.streamToString(urlConnection
                        .getInputStream());
                JSONObject jsonObj = (JSONObject) new JSONTokener(response)
                        .nextValue();

            }catch(Exception exc){
                exc.printStackTrace();
            }finally {
                if(urlConnection!=null){
                    try{
                        urlConnection.disconnect();
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            }
          //  mHandler.sendMessage(mHandler.obtainMessage(what, 2, 0));
        }
    }.start();
}}

我需要将jsonObj传递回主线程吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试在Thread中使用Join方法。在多线程程序中也可以这样做的其他方法是将对象同步到想要在线程之间共享的对象。通过同步对象,您必须首先允许将完成对对象进行操作的其他线程首先访问,然后您将稍后将该对象分配回主线程。在这种情况下,如果处理Object的当前Thread尚未通过Object,则其他线程的任何尝试都将导致等待。但是当当前线程通过处理对象时,其他线程现在可以访问它

答案 1 :(得分:-1)

使用interface将对象作为回叫发送。

f<decltype(r)>(r); // static assert success now