-1

Я создал AsyncTask и хочу начать другое действие, когда оно закончится (onPostExecute), но оно не будет работать, и я не могу найти проблему. Может быть, проблема с String, String, String? Вот мой код:Как начать работу с AsyncTask?

public class StartSearch extends AsyncTask<String, String, String> { 

    private Activity activity; 

    @Override 
    protected String doInBackground(String... strings) { 

     StringBuilder sb = new StringBuilder(); 
     String http = "https://list-creater-service.herokuapp.com/api/v1/search"; 
     HttpURLConnection urlConnection = null; 
     JSONObject json = null; 
     HttpResponse response = null; 

     try { 
      //connect to server 
      URL url = new URL(http); 
      urlConnection = (HttpURLConnection) url.openConnection(); 

      urlConnection.setDoOutput(true); 
      urlConnection.setRequestMethod("POST"); 
      urlConnection.setUseCaches(false); 
      urlConnection.setConnectTimeout(10000); 
      urlConnection.setReadTimeout(10000); 
      urlConnection.setRequestProperty("Content-Type","application/json"); 

      urlConnection.setRequestProperty("Host", "list-creater-service.herokuapp.com"); 
      urlConnection.connect(); 

      //Create JSONObject here 
      JSONObject jsonParam = new JSONObject(); 
      jsonParam.put("gamemode", gametype); 
      jsonParam.put("country", selCountry); 
      jsonParam.put("min_size", minSize); 
      jsonParam.put("max_size", maxSize); 
      OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream()); 
      out.write(jsonParam.toString()); 
      out.close(); 



      int HttpResult = urlConnection.getResponseCode(); 
      if(HttpResult == HttpURLConnection.HTTP_OK){ 

       BufferedReader br = new BufferedReader(new InputStreamReader(
         urlConnection.getInputStream(),"utf-8")); 
       String line; 
       while ((line = br.readLine()) != null) { 
        sb.append(line); 
       } 
       br.close(); 
       String jsonS = sb.toString(); 

       JSONArray jsonArray = new JSONArray(jsonS); 
       int length = jsonArray.length(); 

       String[] names = new String[length]; 

       for (int i = 0; i < length; i++) { 
        JSONObject jsonObject = new JSONObject(jsonArray.get(i).toString()); 

        ArrayList serverList = new ArrayList(); 
        serverList.add(jsonObject.getString("name")); 

        serverData = getSharedPreferences(filename, 0); 
        SharedPreferences.Editor editor = serverData.edit(); 
        Set<String> set = new HashSet<String>(); 
        set.addAll(serverList); 
        editor.putStringSet("name", set); 
        editor.commit(); 
        System.out.println(jsonObject.getString("name")); 

        names[i] = jsonObject.getString("name"); 
       } 

       //String name = jsonObject.getString("name"); 
       System.out.println("" + sb.toString()); 

      }else{ 
       System.out.println(urlConnection.getResponseMessage()); 
      } 

     } catch (MalformedURLException e) { 

      e.printStackTrace(); 
     } 
     catch (IOException e) { 

      e.printStackTrace(); 
     } catch (JSONException e) { 
      //TODO Auto-generated catch block 
      e.printStackTrace(); 
     }finally{ 
      if(urlConnection!=null) 
       urlConnection.disconnect(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     activity.startActivity(new Intent(activity, ServerIndex.class)); 
    } 

} 

Нужна помощь! Thx :)

+1

Где инициализируется деятельность? – Raghunandan

+0

любое исключение или ошибка –

+0

Вы пробовали метод Intent ??? –

ответ

1

У вас есть активность активности, но вы не присвоили ей текущий контекст активности. Назначьте ему текущий контекст активности.
activity = currentContext;

+0

спасибо, что это сработало !! :) –

0

Вы должны использовать runOnUIThread в вашем onPostExecute

  runOnUiThread(new Runnable() { 

      public void run() { 
       activity.startActivity(new Intent(activity, ServerIndex.class)); 
      }}); 

И как сказал Raghunandan, активность не инициализирован. Вы можете получить доступ к методу startActivity из вашего класса StartSearch с помощью

SomeActivity.this.startActivity (SomeActivity has to be initialized) 

И поскольку onPostExecute работает в потоке пользовательского интерфейса, вы можете или не звонить runOnUIThread.

+0

onPostExecute работает по потоку ui. только вещь вопрос отправлен отсутствует звонок super – Raghunandan

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