2015-12-18 1 views
1

Я пытаюсь добавить диалог прогресса в мое приложение, пока он загружает данные из залпа. Я пробовал несколько способов, но сейчас я следую этому руководству http://www.androidhive.info/2014/07/android-custom-listview-with-image-and-text-using-volley/ и надеялся, что это будет выглядеть как пример, используемый там. Пожалуйста, кто-нибудь может взглянуть на мой код до сих пор! Я не получаю ошибки, но не отображается, как пример. Как вы можете видеть, я создал метод в onCreate и вызвал метод hide в моих слушателях ответа.Добавление диалогового окна прогресса в приложение во время загрузки данных из волейбола

Спасибо!

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private List<NewsRecord> newsListData = new ArrayList<NewsRecord>(); 

    private GridView newsListView; 

    private NewsListAdapter adapter; 

    LinearLayout layout; 

    private ProgressDialog pDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     GridView newsListView = (GridView) findViewById(R.id.newsFeedList); 
     adapter = new NewsListAdapter(this, R.layout.adapter_news_list, newsListData, this); 

     layout = (LinearLayout) findViewById(R.id.progressbar_view); 
     newsListView.setAdapter(adapter); 

     pDialog = new ProgressDialog(this); 
     // Showing progress dialog before making http request 
     pDialog.setMessage("Loading Articles..."); 
     pDialog.show(); 

     newsListView.setOnItemClickListener(itemClicked); 

     nextStart = 0; 
     updateListData(nextStart, 20); 

    } 

    public int nextStart = 0; 

    public void updateListData(int StartPoint, int count){ 
     String url = "http://www.efstratiou.info/projects/newsfeed/getList.php?start=" + StartPoint + "&count=" + count; 

     EDANewsApp app = EDANewsApp.getInstance(); 

     JsonArrayRequest jsonRequest = new JsonArrayRequest(url, listener, errorListener); 
     app.requestQueue.add(jsonRequest); 

     nextStart +=count; 
    } 

    @Override 
    public boolean onCreateOptionsMenu (Menu menu){ 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_menu, menu); 
     return true; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     hidePDialog(); 
    } 

    private void hidePDialog() { 
     if (pDialog != null) { 
      pDialog.dismiss(); 
      pDialog = null; 
     } 
    } 

    public boolean onOptionsItemSelected(MenuItem item){ 
     switch (item.getItemId()) { 
      case R.id.action_about: 
       Intent intent = new Intent(this, AboutActivity.class); 
       startActivity(intent); 
       return true; 
      case R.id.action_search: 
       return true; 
      case R.id.action_settings: 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
      } 
    } 

    AdapterView.OnItemClickListener itemClicked = new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      Intent intent = new Intent(MainActivity.this, NewsItemActivity.class); 

      intent.putExtra("newsItemId", newsListData.get(position).recordId); 

      startActivity(intent); 
     } 
    }; 

    private SearchView.OnQueryTextListener searchQueryListener = new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      Intent searchIntent = new Intent(MainActivity.this, SearchResultsActivity.class); 
      searchIntent.putExtra("query", query); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }; 

    //Listeners 
    Response.Listener<JSONArray> listener = new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      //we successfully received the JSONArray 
      //Here we will extract the data and use it in our app 

      //Clear the dataset before loading new data 
      // newsListData.clear(); 
      //Go through all the JSON objects 
      for (int i = 0; i < response.length(); i++) { 

       try { 
        //Get one JSON object 
        JSONObject jsonObj = response.getJSONObject(i); 

        //Put JSON data in a Java object 
        NewsRecord record = new NewsRecord(); 
        record.recordId = jsonObj.getInt("record_id"); 
        record.title = jsonObj.getString("title"); 
        record.date = jsonObj.getString("date"); 
        record.shortInfo = jsonObj.getString("short_info"); 
        record.imageUrl = jsonObj.getString("image_url"); 

        newsListData.add(record); 

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

      } 
      adapter.notifyDataSetChanged(); 
      hidePDialog(); 
     } 
    }; 

    Response.ErrorListener errorListener = new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      //There was an error in the communication 
      //We can notify the user about it 
      hidePDialog(); 

     } 
    }; 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/newsListItem" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:id="@+id/progressbar_view" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:orientation="horizontal" > 

      <ProgressBar 
       style="?android:attr/progressBarStyle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical|center_horizontal" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical|center_horizontal" 
       android:text="Loading data..." /> 
     </LinearLayout> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="#C0C0C0" /> 
    </LinearLayout> 

    <GridView 
     android:id="@+id/newsFeedList" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:verticalSpacing="0dp" 
     android:horizontalSpacing="0dp" 
     android:stretchMode="columnWidth" 
     android:numColumns="2"/> 

</FrameLayout> 
+0

дайте себе представление об AsyncTask. Внутри этой задачи вы можете отобразить диалоговое окно «Прогресс». Поиск после AsyncTask и Progress Dialog в google. Первый удар - это то, что вам нужно –

+0

Мне сказали, что мне не нужно использовать AsyncTask, но просто покажите индикатор выполнения, прежде чем я отправлю запрос, и спрячу его внутри onResponse(), когда все данные прибыли – user3005003

ответ

0

Попробуйте код ниже

ProgressDialog pd = ProgressDialog.show(context,null,"Please wait"); 
JsonArrayRequest jsonRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      if(pd!=null && pd.isShowing()) 
       pd.dismiss(); 
      // Code 

     }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      if(pd!=null && pd.isShowing()) 
       pd.dismiss(); 
      // Code 
     }); 

app.requestQueue.add(jsonRequest); 
+0

все в метод oncreate? – user3005003

0

Попробуйте это:

progress = ProgressDialog.show(this, "dialog title", 
"dialog message", true); 

Кстати, у вас должно быть введение с AsyncTask и должно отображать ProgressDialog в этой задаче.

+0

Мне сказали, что мне не нужно использовать AsyncTask, но просто покажите индикатор выполнения, прежде чем я отправлю запрос, и спрячу его внутри onResponse(), когда все данные прибыли – user3005003

0
private ProgressBarCircularIndetermininate pBar; 

pBar = (ProgressBarCircularIndetermininate) getView().findViewById(R.id.progressBarCircularIndetermininate); 

private void makeJsonRequest() { 

      showProgressDialog(); 
      StringRequest strReq = new StringRequest(Method.POST, URL.DASHBOARD, new Response.Listener<String>(){ 

       @Override 
       public void onResponse(String response){ 

         try { 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
        hideProgressDialog(); 
       } 
      }, 
      new Response.ErrorListener() 
      { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        AppController.getInstance().volleyErrorHandler(error); 
        hideProgressDialog(); 
       } 
      }) { 
       @Override 
       protected Map<String, String> getParams() { 
        Map<String, String> params = new HashMap<String, String>(); 
        params.put("user_id", userID); 
        return params; 
       } 
      }; 
      strReq.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT, NUMOFATTEMPT, BACKOFMULT)); 
      // Adding request to request queue 
      AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
     } 

    private void showProgressDialog() { 
      if (!pBar.isShown()) 

       pBar.setVisibility(View.VISIBLE); 
     } 

     private void hideProgressDialog() { 
      if (pBar.isShown()) 

       pBar.setVisibility(View.GONE); 
     } 
+0

спасибо, но я не уверен, где это код должен идти, внутри oncreate? – user3005003

+0

Просто поместите makeJsonRequest() метод вне OnCreate() и вызывать этот метод в OnCreate() метод как этот === защищен недействительным OnCreate (Bundle savedInstanceState) \t { \t \t super.onCreate (savedInstanceState); \t \t setContentView (R.layout.fragment_follower); \t \t \t \t \t \t, если (Util.isInternetAvailable (getApplicationContext())) \t \t { \t \t \t makeJsonRequest(); \t \t} \t} частная пустота makeJsonRequest() { } – Bhavnik

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