mal*_*he4 0 android android-asynctask android-fragments
首先,关于我的项目的一些信息:
我有一个由几个片段组成的应用程序.(我有一个扩展FragmentActivity的类和另一个扩展FragmentPagerAdapter的类.)所以实际上我的代码在Fragments中运行.
我在其中一个片段中调用了一个asynctask进行一些计算.asyncTask是一个单独的文件,该类不在Fragment类中.
因此,1个文件是asynctask,另一个是fragmet(来自片段的变量不能直接由asynctask访问!!!).
我可以使用ProgressDialog显示asyncTask的结果.但是我希望能够将数据(asynctask的结果)返回给我片段中的变量.到目前为止我尝试过的是:
我试着这样做:
我使用了以下按钮单击后调用的代码.
mytask1 = new myAsyncTask(this);
String result =mytask1.execute(value1).get();
Run Code Online (Sandbox Code Playgroud)
但是这会导致主线程卡住并等待asynctask完成.
2.使用loginSharePreferens
loginPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE);
loginPrefsEditor = loginPreferences.edit();
loginPrefsEditor.putString("result", result);
loginPrefsEditor.commit();
Run Code Online (Sandbox Code Playgroud)
这给了我错误.
我也试过这个
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext() );
这与第二种方法类似.
4.我试图在我的片段中创建一个只设置值的方法,我试图在片段内调用它
MyFrragment1.this.setRestult(1); // is called in the onPostExecute of the asyncTask
public void setRestult(int result){
this.test1=result; ///inside of the fragment
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误:"在范围内无法访问MyFragment1类型的封闭实例"
我不知道还有什么可以尝试的.有任何想法吗 ?
您可以使用onPostExecute在UI线程中运行的方法,并在doInBackground完成后调用.您可以Fragment像这样覆盖它:
new myAsyncTask() {
@Override
protected void onPostExecute( Result result ) {
super.onPostExecute( result );
// Do something with result here
}
}.execute(value1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |