AsyncTask不工作

时间:2014-04-02 05:49:18

标签: android android-asynctask

修改
好的,真正的简化版本,让我们称之为我的Activity2

public class test {
    String username, id;
    TextView view1, view2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        view1 = (TextView)findViewById(R.id.textView1);
        view2 = (TextView)findViewById(R.id.textView2);

        new testFunction().execute();

        view1.setText(username);
        view2.setText(id);
     }

     private class testFunction extends AsyncTask<Void, Void, Void> {

         @Override
         protected Void doInBackground(Void... x) {
             username = "1";
             id = "2";
             return null;
         }
      }
}

Activity1有一个提交按钮,可以启动Activity2(此活动)。在Activity2调用onCreate()之后,屏幕上将出现“12”。当我单击返回(销毁Activity2并返回到Activity1)时,然后再次返回到Activity2,屏幕上不显示任何内容。这是为什么?

4 个答案:

答案 0 :(得分:1)

这是一个问题

new testFunction().execute("1", "2").get();

您不应该使用get()。它会阻止ui线程等待结果。你永远不应该阻止ui线程。使用

new testFunction().execute("1", "2");

将变量声明为实例变量

TextView view1,view2;
@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_user_data);
     view1 = (TextView)findViewById(R.id.textView1); 
     view2 = (TextView)findViewById(R.id.textView2);
     new testFunction().execute("1", "2")

然后在Asynctask onPostExecute中更新视图

@override
protected void onPostExecute(String result)
{
   super.onPostExecute(result);
   // update view here
}

答案 1 :(得分:0)

当你按下按钮时,

完成动作 Intent i = new Intent(这,这是你的类名.Class);

startActivity(i);
finish();
每当你在创建通话时按下提交按钮进入第二幕时,

就这样了 并且您还可以在每次简历中调用您的asnyc任务时使用简历方法。

答案 2 :(得分:0)

关闭片段时必须存储用户名和ID值。 查看片段生命周期onSaveInstanceState。

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(ARG_NAME, username);
outState.putBoolean(ARG_ID, id);

答案 3 :(得分:0)

我已经为你的onCreate方法添加了一些代码行

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_user_data);

     //get the values from previous avtivity
     Bundle bundle=getIntent().getExtras();
     username=bundle.getString("username").toString();
     id=bundle.getString("id").toString();

     String result = new testFunction().execute("1", "2").get();
     TextView view1 = (TextView)findViewById(R.id.textView1);
     TextView view2 = (TextView)findViewById(R.id.textView2);
     view1.setText(username);
     view2.setText(id);
}

为了获取值,你必须传递上一个活动的值,我猜你已经正确地做了,你错过了什么,你忘了获取Intent值并将它们分配给用户名,id变量