如何将OkHttpClient更改为AsyncTask

时间:2016-11-19 06:43:45

标签: android firebase android-asynctask

OkHttpClient在我的mainactivity.java中不起作用。我想使用AsyncTask但我不知道如何更改它。我想将

FirebaseInstanceId.getInstance().getToken();
发送到我的服务器。

我的代码有OkHttpClient。谢谢

public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
    @Override
    public void onTokenRefresh() {
        String token = FirebaseInstanceId.getInstance().getToken();
        registerToken(token);
        Log.d("TOKEN", token);
    }

    private void registerToken(String token){
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("Token", token)
                .build();

        Request request = new Request.Builder()
                .url("http://localhost/register.php")
                .post(body)
                .build();
        try {
            client.newCall(request).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个,你必须将网址发送到OkHttpAsync。像新OkHttpAsync().excute(url);

一样
public class OkHttpAsync extends AsyncTask<String, Void, byte[]> {

OkHttpClient client = new OkHttpClient();

@Override
protected byte[] doInBackground(String... params) {



    OkHttpClient client = new OkHttpClient();
    RequestBody body = new FormBody.Builder()
            .add("Token", token)
            .build();

    Request request = new Request.Builder()
            .url(params[0])
            .post(body)
            .build();
    try {
        Response response = client.newCall(request ).execute();
    return response.body().bytes();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

@Override
    protected void onPostExecute(byte[] b ) {
        //Handle result here
        super.onPostExecute(playlistListResponse);
    }
}

编辑

这是你将url发送到OkHttpAsync类的结果,结果将在OkHttpAsync类的onPostExcute方法中。

OkHttpAsync okHttpAsync = new OkHttpAsync();
okHttpAsync.execute("http://localhost/register.php");

编辑2.

我发现你在android中遇到网络请求问题。网络请求不应该在mainThread上。如果你在主线程上触发它,那么它将导致异常。 android中有很多网络请求的库。我建议你使用Volley。这是tutorial,请仔细阅读。

希望这会对你有所帮助

答案 1 :(得分:0)

在创建上述答案中提到的类之后,只需创建一个对象并按如下方式传递URL:

OkHttpAsync okHttpAsync = new OkHttpAsync();
okHttpAsync.execute("http://localhost/register.php");

@Zeeshan在答案的第一行提到了这一点。

谢谢。