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();
}
}
}
答案 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在答案的第一行提到了这一点。
谢谢。