请问关于如何封装的问题

Android 码拜 5年前 (2015-04-24) 187次浏览 0个评论
 

比如说 要在一个类ABC里边 实现一个  updatenetworkdata()的函数,而这个函数是返回list的。
即  public list updatenetworkdata() {
       
    return     xxx;        
}

这样方便调用,比如说在 activity中 调用  mABC= new ABC ();mABC.updatenetworkdata() 获得相应更新后的数据。

但是 访问网络数据库是需要启动线程才能够访问的。即HttpClient.postByHttpClient(acv);  也就是说  有没有可能让updatenetworkdata() 这个函数访问完网络数据库后,返回相应的数据呢?

麻烦会的朋友帮忙回复下,谢谢啦

请问关于如何封装的问题
15分
那你就把updatenetworkdata放到异步线程中,或者网络请求完毕后,触发一个回调,回调中你去调用updatenetworkdata
请问关于如何封装的问题
引用 1 楼 bdmh 的回复:

那你就把updatenetworkdata放到异步线程中,或者网络请求完毕后,触发一个回调,回调中你去调用updatenetworkdata

@bdmh   非常感谢您的回复,  麻烦再帮忙回复下。
1  “把updatenetworkdata放到异步线程中”  这个麻烦再详细说下吧
2   网络请求完毕后,触发一个回调,回调中你去调用updatenetworkdata
   如果这样的话, 那调用updatenetworkdata() 能返回一个更新后的 list数据吗?

类ABC里边 实现一个  updatenetworkdata()的函数
public class ABC{ 
。。。。。
public list updatenetworkdata() {
        list =HttpClient.postByHttpClient(acv);  
     return     list ;        
 }

}

请问关于如何封装的问题
15分
interface MyCallBack {
     public void onData(Object t);
     public void onError(String error, int code);
}
 public void updatenetworkdata(final String url, final MyCallBack callBack) {
        new Thread() {
                public void run() {
                       //做网络数据操作
                       List list = ...
                      callBack.onData(list);
                }

        }.start();
    
}


请问关于如何封装的问题
引用 3 楼 birdsaction 的回复:
interface MyCallBack {
     public void onData(Object t);
     public void onError(String error, int code);
}
 public void updatenetworkdata(final String url, final MyCallBack callBack) {
        new Thread() {
                public void run() {
                       //做网络数据操作
                       List list = ...
                      callBack.onData(list);
                }

        }.start();
    
}


birdsaction   非常感谢您的回复
我想要的就是您写的代码的效果的。

有个地方实在是太会写,麻烦再帮忙回复下。

就是比如 我要在fragmentacb.java里边 要调用这个函数,那怎么给这个函数的 第二个参数怎么写呢?

public class EndFragment extends BaseFragment { 
      …
        public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

mABC = new ABC();
                        mMemberChat.updatenetworkdata(ac,XXXXXX);  //  XXXX应该怎么写
                        
                       onData(Object t) {        [color=#FF0000] 这个  onData()接口应怎么实例化呢
                                 Log.d(TAG,”abc”);
                      }
[/color]     }

}

public class ABC{

interface MyCallBack {
     public void onData(Object t);
     public void onError(String error, int code);
}
 public void updatenetworkdata(final String url, final MyCallBack callBack) {
        new Thread() {
                public void run() {
                       //做网络数据操作
                       List list = …
                      callBack.onData(list);
                }

        }.start();
    
}

}

请问关于如何封装的问题
15分
public class MyActivity {
 

       public void onCreate() {

 
       }

	MyCallBack callback = new MyCallBack() {

		@Override
		public void onError(String error, int code) {

		}

		@Override
		public void onData(Object t) {

		}
	};
}

请问关于如何封装的问题
引用 5 楼 birdsaction 的回复:
public class MyActivity {
 

       public void onCreate() {

 
       }

	MyCallBack callback = new MyCallBack() {

		@Override
		public void onError(String error, int code) {

		}

		@Override
		public void onData(Object t) {

		}
	};
}

@ birdsaction  非常感谢您的回复

还有个地方想请问下,麻烦再帮忙回复下。

是不是  我写的代码有问题呢?

就是关于 当运行到 回调函数的时候,利用回调的函数 进行更新 listview的时候,会提示错误的:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
这个问题我是用 :
Message mes = mHandler.obtainMessage(1);
mHandler.sendMessage(mes);
来在 handler里边处理控件的更新来解决的。

public class FFragment extends BaseFragment {
。。。
     public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

                mChat.updatenetworkdata(null,new MemberChatCallBack(){
         public void onDone(List<Info> list){
                                   mGetAdapter = new GetAdapter(getActivity(),list);
            mGetAdapter.addlist(list);
    listView11.setAdapter(mGetAdapter);
  // 这样写会提示上面的错误的,意思是 要在主线程更新界面
                                  //Message mes = mHandler.obtainMessage(1);
//mHandler.sendMessage(mes);
   //添加这两句代码后,在Handler里边处理 listview的显示就可以的
                                 
         }
        })

}

}

public class Chat{

  public void updatenetworkdata(final String url, final MyCallBack callBack) {
         new Thread() {
                 public void run() {
                        //做网络数据操作
                       List list = …
                       callBack.onData(list);
                 }

         }.start();
     
 }

 }

请问关于如何封装的问题
15分
线程运行完更新UI 用handler更新 不能直接更新

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请问关于如何封装的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!