1

Метод onCreateView завершается, не дожидаясь ответа от веб-службы. Естественно, представление возвращает null. Все остальное работает правильно. Я имею в виду ниже.Как вернуть завышенное представление данными ответа веб-звонка

private View view; 
private View notExistedOwnStory; 
private View existedOwnStory; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

... 

notExistedOwnStory = inflater.inflate(R.layout.tab_writestory, container, false); 
existedOwnStory = inflater.inflate(R.layout.tab_deletestory, container, false); 

checkOwnStory(storyID, username); 

if(view == notExistedOwnStory){ 

     ... 

    } 

    if (view == existedOwnStory) { 

     ... 

    } 

    return view; 
} 

private void checkOwnStory(final String storyID,final String username) { 

    // Tag used to cancel the request 
    String tag_string_req = "req_checkOwnStory"; 

    pDialog.setMessage("Checking Own Story ..."); 
    showDialog(); 

    StringRequest strReq = new StringRequest(Method.POST, AppConfig.CHECK_OWN_STORY, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "Checking Own Story Response: " + response.toString()); 
      hideDialog(); 

      try { 
       JSONObject jObj = new JSONObject(response); 
       boolean error = jObj.getBoolean("error"); 
       if (!error) { 

        // here is the set according to the response 
        view = existedOwnStory; 

       } else { 

        view = notExistedOwnStory; 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Checking Own Story Error: " + error.getMessage()); 
      Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show(); 
      hideDialog(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      // Posting params to check own story url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("storyID", storyID); 
      params.put("username", username); 

      return params; 
     } 

    }; 

    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
} 

Что делать, если checkOwnStory метод полностью закончился, и метод onCreateView работает соответствующим образом?

ответ

0

Это неправильный дизайн. onCreateView() работает в основном потоке, поэтому вы не можете просто ждать в этом методе для раздувания представлений. Следовательно, вы можете раздуть XML (возможно, с помощью диалогового окна «Прогресс»), чтобы показать промежуточный прогресс.

Вы можете опубликовать сообщение через Handler с public void onResponse(String response) с использованием метода Handler.post() после успешного разбора JSON.

Вы можете реализовать handleMessage() метод и на основе сообщения, которое вы получаете от onResponse() метода вы можете добавить какой вы хотите просмотреть либо программно (addView) или из файла XML через ViewStub может быть и обновление, Вид на View.VISIBLE.

+0

Я сделал с вашим дизайном, я просто задавался вопросом, лучше ли дизайн, который я попросил, или нет. Спасибо за ответ. –

+0

Это не лучший дизайн, если методы жизненного цикла, такие как onCreateView(), onStart() и т. Д., Требуют много времени. Поскольку ожидается, что мы разработаем отзывчивый интерфейс – Guna

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