AsyncTask没有调用doInBackground

时间:2016-09-04 10:02:10

标签: android android-asynctask

我的应用程序中有一个按钮,点击它应该运行AsyncTask但是没有调用doInBackground方法,我正在尝试使用AsyncTask中的okHTTP连接到我的服务器,这是我的代码,

public class Home extends Fragment implements View.OnClickListener {
Button button;
public static final String TAG = "aj";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.home, container, false);
    button = (Button) v.findViewById(R.id.button);
    button.setOnClickListener(this);
    FirebaseMessaging.getInstance().subscribeToTopic("test");
    FirebaseInstanceId.getInstance().getToken();
    return v;
}

@Override
public void onClick(View v) {
    sendRequest myTask = new sendRequest();
    if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB)
        myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    else
        myTask.execute();
}

private class sendRequest extends AsyncTask<Void,Void,Void>{
    @Override
    protected Void doInBackground(Void... params) {
        Log.v(TAG, "doInBackground");
        String token = FirebaseInstanceId.getInstance().getToken();

        OkHttpClient client = new OkHttpClient();
        RequestBody body = null;
        if (token != null) {
            body = new FormBody.Builder()
                    .add("Token", token)
                    .build();
        }
        Request request = new Request.Builder()
                .url("https://www.example.com/aj20010319")
                .post(body)
                .build();
        try {
            client.newCall(request).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
}

我不知道为什么没有调用doInBackground方法,记录器不会记录任何与之相关的内容。如果我是正确的,它设置正确。我尝试了其他线程中的解决方案,但没有一个正在运行。

2 个答案:

答案 0 :(得分:2)

检查我的机器中的代码,删除其工作正常的复杂性我粘贴下面的代码。 它可能发生两件事

  
      
  1. 构建版本的问题。只需拨打myTask.execute();删除所有if else
  2. 即可   
  3. logcat可能会发生这种情况。如果可能的话,从doInBackground做吐司
  4.   
Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_LONG).show();
  
      
  1. 如果您在logcat中搜索,它总是按消息搜索而不是按标签搜索,因此按 doInBackground 搜索而不是按照aj
  2. 搜索   
public class MainActivity extends Activity  implements View.OnClickListener{
Button button;
    @Override
    public void onClick(View arg0) {
    sendRequest myTask = new sendRequest();
    if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB)
     myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    else
     myTask.execute();

    }



    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(this);
    }



    private class sendRequest extends AsyncTask<Void,Void,Void>{
        @Override
        protected Void doInBackground(Void... params) 
        {
            int i=0;
            while(++i<100)
            {
                Log.i("www", "www");
            }

            return null;
        }
    }
}

答案 1 :(得分:1)

您需要实例化类

new myTask().execute();

onClickListener