当前位置: 代码迷 >> Android >> 请教 关于调用的有关问题
  详细解决方案

请教 关于调用的有关问题

热度:65   发布时间:2016-04-28 01:32:24.0
请问 关于调用的问题
请问  想实现以下效果,代码具体应该怎么处理呢?

FragmentA中      想调用    testA类里边 getdata() 函数,而这个函数返回一个list。


而这个函数 要通过访问 网络数据库获取数据并返回相应的数据CustomHttpClient.postByHttpClient(String);
但是 访问网络数据库要启动线程才能访问网络数据库,否则会报错的。

即:

public class FragmentAextends BaseFragment {
。。。

   public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
testa = new testA();
                       list=  testa.getdata();
}


}


public class MemberChat { 
  ...
   public List<Info> getLocalData ( ) {
                         xxxxxxxxx  /  /这个地方应该怎么写呢
return mList;
}

 public class testThread extends Thread {
     private static final String TAG = "test";
        public void run() {
               ....
         list =CustomHttpClient.postByHttpClient(String);
.
        }
    }


}


------解决思路----------------------
在那里面你把那个线程启动 把获得的值返回就ok了
------解决思路----------------------
引用:
Quote: 引用:

在那里面你把那个线程启动 把获得的值返回就ok了


@u012456102   非常感谢您的回复

您的意思是 在下边的代码里边  启动线程 ,但是 怎么获取 线程的返回值呢?
麻烦再帮忙回复下吧,谢谢啦



public List<Info> getLocalData ( ) {
                       mtestThread  = new testThread ();
                        mtestThread.start();
  // 但是怎么获得返回值呢
return mList;
 }
使用handler吧 在访问完成后 发送message
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

在那里面你把那个线程启动 把获得的值返回就ok了


@u012456102   非常感谢您的回复

您的意思是 在下边的代码里边  启动线程 ,但是 怎么获取 线程的返回值呢?
麻烦再帮忙回复下吧,谢谢啦



public List<Info> getLocalData ( ) {
                       mtestThread  = new testThread ();
                        mtestThread.start();
  // 但是怎么获得返回值呢
return mList;
 }
使用handler吧 在访问完成后 发送message


@ u012456102   非常感谢您的回复

那您的意思是说  是不能封装具有这个功能的函数的。 是这个意思吗?

比如在一个类里边有   getnetworkdata() ,  updatenetworkdata()分别代表 获取网络数据,和更新网络数据的函数。

那么 按您所说的,就是在函数里边 启动线程,然后最后就 sendmessage() 告知处理完。   这样的话,就是不能实现封装好实现的函数功能了哦
使用handler的原因是只能在主线程中更新控件,如果你的 updatenetworkdata()方法没有更新控件的话,可以在getnetworkdata() 里面直接调用 updatenetworkdata()
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

在那里面你把那个线程启动 把获得的值返回就ok了


@u012456102   非常感谢您的回复

您的意思是 在下边的代码里边  启动线程 ,但是 怎么获取 线程的返回值呢?
麻烦再帮忙回复下吧,谢谢啦



public List<Info> getLocalData ( ) {
                       mtestThread  = new testThread ();
                        mtestThread.start();
  // 但是怎么获得返回值呢
return mList;
 }
使用handler吧 在访问完成后 发送message


@ u012456102   非常感谢您的回复

那您的意思是说  是不能封装具有这个功能的函数的。 是这个意思吗?

比如在一个类里边有   getnetworkdata() ,  updatenetworkdata()分别代表 获取网络数据,和更新网络数据的函数。

那么 按您所说的,就是在函数里边 启动线程,然后最后就 sendmessage() 告知处理完。   这样的话,就是不能实现封装好实现的函数功能了哦
使用handler的原因是只能在主线程中更新控件,如果你的 updatenetworkdata()方法没有更新控件的话,可以在getnetworkdata() 里面直接调用 updatenetworkdata()


@u012456102   非常感谢您的回复

可能我表达的不清楚。

其实是 我想 使用   MVC 模式

 M层,即用一个类 封装  一些  跟网络数据库有关的函数。 比如 getnetworkdata()获取网络数据
updatenetworkdata() 更新网络数据。

然后  C层就可以调用  M层里边的 这些函数,以便得到网络数据。

但是  现在问题是 getnetworkdata() 不能返回 获取网络的数据list。

请问  这个getnetworkdata() 真的不能返回网络数据的吗
你的getnetworkdata() 是在线程里访问网络数据,由于是在线程之中,你不知道他什么时候能访问完成,所以必须等他访问完成了之后,你才能做更新操作
  相关解决方案