2017-01-23 7 views
0

Я работаю с простой функцией, которую я делаю, чтобы выполнить запрос HTTP-друга, который я вызываю из другой статической ссылки. Проблема в том, что система фрагментов, предоставляемая google (Tab Navigator Activity), содержит код предварительной сборки, который не позволяет мне использовать нестатический метод.Полезно ли использовать статические или нестатические? (Android)

Код, который я называю метод

enviarsolicitud(param1,param2); 

Это код пустоты, что я говорю

 private static void enviarsolicitud(final String idadder, final String idadded) 
     { 
      class EnviarSolicitudClass extends AsyncTask<String,Void,String> 
      { 
       @Override 
       protected void onPreExecute() 
       { 
        super.onPreExecute(); 
        System.out.println("enter"); 
       } 
       @Override 
       protected void onPostExecute(String s) 
       { 
        super.onPostExecute(s); 
        if(s.contains("friendrequest")){ 
         String[] friendrequest = s.split(":"); 
         System.out.println(friendrequest[0] + " " + friendrequest[1]); 
        } 
        else if (s.contains("friendrequestcant")) 
        { 

        } 
        else 
        { 

        } 
       } 
       @Override 
       //En segon pla 
       protected String doInBackground(String... params) 
       { 
        HashMap<String,String> dades = new HashMap<>(); 
        dades.put("idadder",params[0]); 
        dades.put("idadded",params[1]); 
        RegisterUserClass ruc = new RegisterUserClass(); 
        String resultat = ruc.sendPostRequest("http://www.myurl.net/friend.php",dades); 
        return resultat; 
       } 

      } 
      EnviarSolicitudClass esc = new EnviarSolicitudClass(); 
      esc.execute(idadder,idadded); 
     } 

Я не знаю много о нестатическом и статические, но проблема в том, что google использует статические методы для предварительно созданной активности. Вы рекомендуете использовать статические для этого типа пустоты? Я всегда использую нестатические методы, потому что статическое ограничение ограничено

+0

Я немного смущен. 1. Ваш первый пример - не метод. Это утверждение, которое создает анонимный внутренний класс. 2. Второй пример делает нечто совершенно иное, чем первое. 3. Java не допускает объявления классов внутри методов, поэтому второй пример даже не будет компилироваться (если предположить, что сам метод находится внутри другого класса). –

+0

@ Code-Apprentice Я могу скомпилировать его, никаких ошибок в моем коде –

+0

@ Code-Apprentice Вы действительно можете создавать классы в методах. Его немой, но я видел много сообщений здесь, которые, кажется, думают, что так должно быть сделано AsyncTasks. –

ответ

0

Раствор для меня:

new HomeActivity().enviarsolicitud(param1,param2); 

Последний ответ от @ cricket_007 помогает мне улучшить мой код.

1

Я не думаю, что это проблема статического и нестатического.

Ваша проблема в том, когда писать/использовать AsyncTask. Мое предложение, вероятно, будет переключено на Volley или OkHttp, если вы используете HTTP-методы, но если вы хотите продолжить этот путь, читайте дальше.

сделать интерфейс

public interface StringCallback { 
    void onResponse(String result); 
} 

И добавить параметр для результата обратного вызова для sendPostRequest, которые принимают ответ POST.

private void enviarsolicitud(final String idadder, final String idadded) { 

    HashMap<String,String> dades = new HashMap<>(); 
    dades.put("idadder",params[0]); 
    dades.put("idadded",params[1]); 
    RegisterUserClass ruc = new RegisterUserClass(); 

    ruc.sendPostRequest("http://www.myurl.net/friend.php",dades,new StringCallback() { 
     @Override 
     public void onResponse(String response) { 
      // Continue with UI logic here 
     } 
    }); 

    // Can't use HTTP response here 
} 

И sendPostRequest, вы используете AsyncTask, или как HTTP рамки вы хотите, и «возврат» ответ, когда он вернется.

public void sendPostRequest(final String url, final HashMap<String, String> params, final StringCallback callback) { 
    new AsyncTask<String, Void, String>() { 

     @Override 
     public String doInBackground(String... params) { 
      // TODO: HTTP things 
     } 

     @Override 
     protected void onPostExecute(String s) 
     { 
      super.onPostExecute(s); 
      if (callback != null) { 
       callback.onResponse(s); 
      } 
      return; // Done here 
    }.execute(params.get("idadder"), params.get("idadded")); 
} 
+0

Я попробую, спасибо! –

+0

Да, в основном, это адаптация из этого ответа http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is- a –

+0

Я не уверен, что вы пытаетесь мне сказать, но я бы предложил выделить эти параметры для разделения переменных –