MyException - 我的异常网
当前位置:我的异常网» Android » 来,和大家探讨个有关问题,activity和fragment异步

来,和大家探讨个有关问题,activity和fragment异步传输数据的有关问题

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
来,和大家探讨个问题,activity和fragment异步传输数据的问题
本帖最后由 heaimnmn 于 2014-07-31 18:24:38 编辑
发个讨论帖,最近发现以前写的代码有点傻逼,想改进下,需求是这样的:
进入MainActivity,会启动异步线程访问网络,把获得到数据给fragment显示出来,看起来很简单,其实内在有个通行机制逻辑,让我很困惑。
因为进入MainActivity的时候,之前的Activity会传入一个JSONString过来,你要在把这个JSONString给POST到服务器才能返回值,但是根据activity和fragment的生命周期,你不可能在MainActivity里面启动异步线程访问网络,获取得到值以后再去传值给fragment,因为fragment已经oncreateview了。
以前傻逼的方法就是在生成fragment的时候,把JSONstring放到bundler里面传到fragment里面,再从fragment里面访问网络,获得数据。但是有N个fragment的时候就要访问网络N次了。
所以想和大家讨论下activity和fragment异步传输数据的方法,有没有其它更好的方法实现这种回调,,,

PS:最近处于待业状态,忙得很,邀请回帖的别介意我没回复,别邀请了还发私信,,,
------解决方案--------------------
如果fragment的数据都不一样,请求N次有什么问题?
------解决方案--------------------
引用:
Quote: 引用:

如果fragment的数据都不一样,请求N次有什么问题?
但是可以在MainActivity里面一次性请求好,何必再重复请求了,,,

可以考虑在new fragment的时候设置给他
------解决方案--------------------
activity和fragment是独立的,activity可以用异步线程去做些事情的,你可以看下SyncTask类。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

如果fragment的数据都不一样,请求N次有什么问题?
但是可以在MainActivity里面一次性请求好,何必再重复请求了,,,

可以考虑在new fragment的时候设置给他
不懂你的意思,fragment一开始在oncreate就是就要生成了,怎么再去new了,,,

我其实不是很清楚你的界面,我用fragment不是很多,只在和viewpager一起用过。
使用fragment都是new fragment,在activity的oncreate时请求数据,一个菊花转,获得数据后再给fragment设置数据在fragment里面都有一个setData方法
------解决方案--------------------
顶一个,,楼主很厉害的样子...,小弟是来混分的.....
------解决方案--------------------
不知道理解可对:
在Fragment可以提前初始化 onCreateView()这个方法
onCreateView(){
   //此时还没有数据,所以显示 数据正在加载中 showLoadingView()吧
   return view;
}

public void onUpdateView(JSONDATA data){
   //现在UI线程中更新 之前Fragment还在显示loadingView,
}

class MainActivity {
      //activty中做异步请求数据,如果请求成功 调用 Fragment中自己写的onUpdateView()方法.
   
}

//但我到喜欢把网络数据请求都写在service里面,然后网络获取数据结果通过广播回调
Intent intent = new Intent(this,MyService.class); //这个Service 就是专门请求网络数据的。
intent.putString("reqURL",myURL);
intent.putString("params",params);
startService(intent);

在onStartCommand() 里面通过判断 进行网络通信操作。

// service 里面为了避免多个线程浪费 我开启了一个线程池,大小为3个估计是够了。然后用阻塞队列控制。LinkedBlockingQueue.


------解决方案--------------------
网络请求的是否可以统一在一个网络请求类管理呢?需要时,只需传入参数和回调,请求好后,在回调中获取
------解决方案--------------------
是activity 先创建 后再oncreateView的吧。。
------解决方案--------------------
楼主,建议你网络或耗时操作,都放到新的线程中处理。

处理完后通知界面分两种方式:一,尝试postInvalidate;二,保存标志位到数据库或文件中。
一:把view的引用传入后台线程,网络操作完毕后view.postInvalidate()来通知更新。这时候view可能已经不存在了,要注意catch exception,另外考虑加上下面的第二种方法。

二:保存view需刷新的标志到数据库或文件中,每次view重绘的时候,检查一下标识看看是否有新数据,有则加载。
------解决方案--------------------
1.getSupportFragmentManager().findFragmentById/ByTag
2.MainActivty里面放个list当fragment初始化后添加到list,网络请求返回数据后取出调用fragment方法刷新


------解决方案--------------------
引用:
两百分都给我沉下去了,不要嘛,大家说下自己的想法就OK,思路也行我看看可以实践不,,,


 一颗星 多少分 能有星星 
------解决方案--------------------
这是我以前写的一个简化版的BaseFragment,至于异步获取,本菜觉得放哪无所谓吧,可能我没明白lz的意思。直接在Activity中获取数据,更新Fragment可以,或者在BaseFragment中加个abstract   Update 方法,在异步获取之后调用Update也可以。


package Fragment;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.cs.MyApplication;
import com.google.gson.Gson;
import java.lang.reflect.Field;

public abstract class BaseFragment extends Fragment{
    protected View view;//Fragment  layout  最外层  View
    protected Context context = MyApplication.getApplication();
    protected final static Gson gson = new Gson();//用来解析json用
    protected String json_str;//传递的json字符串
    protected static final String json_key = "json";
    boolean should_new_newview = true;

    public BaseFragment() {
        themeob.addObserver(this);
    }

//这个方法可以在Activity中直接获取Fragment的View
    public final View findViewById(int id) {
        return view.findViewById(id);
    }

文章评论

程序员的鄙视链
程序员的鄙视链
程序员都该阅读的书
程序员都该阅读的书
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
一个程序员的时间管理
一个程序员的时间管理
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员和编码员之间的区别
程序员和编码员之间的区别
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
 程序员的样子
程序员的样子
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
每天工作4小时的程序员
每天工作4小时的程序员
如何成为一名黑客
如何成为一名黑客
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
我是如何打败拖延症的
我是如何打败拖延症的
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
10个调试和排错的小建议
10个调试和排错的小建议
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
旅行,写作,编程
旅行,写作,编程
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
代码女神横空出世
代码女神横空出世
程序员必看的十大电影
程序员必看的十大电影
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
那些争议最大的编程观点
那些争议最大的编程观点
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
鲜为人知的编程真相
鲜为人知的编程真相
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
漫画:程序员的工作
漫画:程序员的工作
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
中美印日四国程序员比较
中美印日四国程序员比较
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
总结2014中国互联网十大段子
总结2014中国互联网十大段子
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
编程语言是女人
编程语言是女人
Java程序员必看电影
Java程序员必看电影
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
老程序员的下场
老程序员的下场
程序员应该关注的一些事儿
程序员应该关注的一些事儿
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有