2016-11-19 2 views
-1

OkHttpClient не работает в моей mainactivity.java. Я хочу использовать AsyncTask, но я не знаю, как его изменить. Я хочу отправить Как изменить OkHttpClient на AsyncTask

FirebaseInstanceId.getInstance().getToken();
на мой сервер.

Есть мой код с OkHttpClient. Thank you

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(); 
     } 
    } 
} 
+1

'Как изменить OkHttpClient на AsyncTask'. Невозможно. Вы не можете сравнивать их. Это разные вещи. Первый клиент http. Последний - нить. Пожалуйста, скажите лучше, что вы хотите. – greenapps

+0

Я хочу отправить этот daha FirebaseInstanceId.getInstance(). GetToken() на мой сервер без OkHttpClient –

+0

И? Любой вопрос перефразируя в поле зрения? – greenapps

ответ

1

Попробуйте это, вам нужно будет отправить url в 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); 
    } 
} 

EDIT

Это, как вы отправить URL в OkHttpAsync класса и результат будет в методе onPostExcute класса OkHttpAsync.

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

EDIT 2.

Я вижу, у вас возникли проблемы с запросом сети в андроиде. Сетевой запрос не должен быть на mainThread. Если вы запускаете его в главной теме, это вызовет исключение. В андроидах есть множество libariaies для сетевых запросов. я бы рекомендовал использовать Volley. Вот tutorial, пройдите через него.

Надеется, что это поможет вам

+0

Спасибо @ZeeshanShabbir Я не вижу URL-адреса для вашего кода. Я новичок в android, Можете ли вы дать мне полный код, извините за это? –

+1

OP не хочет использовать OkHttpClient, что я понял. Поэтому я не понимаю этого ответа. – greenapps

+0

ОП не представлял свой вопрос в соответствии с его потребностями. Вопрос должен пройти через редактирование. –

0

После создания упомянутого в ответе выше класса, просто создать объект и передать URL следующим образом:

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

Это то, что @Zeeshan упоминается в первой строке его ответ.

Thank you.

Смежные вопросы