Volley + AlertDialog

Интерфейс, диалоги, темы, стили, меню
Ответить
noobishe
Сообщения: 3
Зарегистрирован: 03 мар 2014, 17:06

Volley + AlertDialog

Сообщение noobishe » 03 мар 2014, 17:27

Всем привет.
Мне нужно реализовать список в диалоговом меню, который формируется исходя из ответа сервера. С джавой только начинаю знакомится, поэтому и такая банальна проблема...
Делаю так:

Код: Выделить всё

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;

import org.json.JSONObject;
import java.util.ArrayList;


public class MainActivity extends Activity {
	
    public ArrayList<String> genres = new ArrayList<String>();	
    public ArrayList<Boolean> list = new ArrayList<Boolean>();	
    private final int IDD_CHECK_GENRES = 3;
    private String TAG = this.getClass().getSimpleName();
    private RequestQueue mRequestQueue;
 
    private ProgressDialog pd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.genre:
                showDialog(IDD_CHECK_GENRES);
                break;
        }
    }
   
    public void parseJSON(JSONObject json){
        try{
        	
            JSONObject value = json.getJSONObject("value");
            JSONArray items = value.getJSONArray("items");
            for(int i=0;i<items.length();i++){
                    JSONObject item = items.getJSONObject(i);
                    genres.add(item.optString("title"));
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
   
    public void GetGenres(){
    	mRequestQueue =  Volley.newRequestQueue(this);
        String url = "http://some.site/android_app?genres=list2";
        pd = ProgressDialog.show(this,"Please Wait...","Please Wait...");
     
        JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
            	parseJSON(response);
            	pd.dismiss();  
;            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i(TAG,error.getMessage());
            }
        });
        mRequestQueue.add(jr); 
    }

    public Dialog onCreateDialog(int id) {
    	
        switch (id) {
           case IDD_CHECK_GENRES:
        	   	GetGenres();
        	   	AlertDialog.Builder builder;
        	   	builder = new AlertDialog.Builder(MainActivity.this);
 
                for(int i=0; i<genres.size(); i++){
                	list.add(false);
                }

                builder.setTitle("TITLE")
                	.setCancelable(false)
                    .setMultiChoiceItems(genres.toArray(new CharSequence[genres.size()]), null, new DialogInterface.OnMultiChoiceClickListener() {
                    	@Override
                    	public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    		list.set(which, isChecked);
                        }
                    })
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    	@Override
                        public void onClick(DialogInterface dialog, int id) {
                    		Toast.makeText(getApplicationContext(), genres.get(0) , Toast.LENGTH_LONG).show();
                        }
                    })

                    .setNegativeButton("neOK", new DialogInterface.OnClickListener() {
	                    @Override
	                    public void onClick(DialogInterface dialog,int id) {
	                    	dialog.cancel();
	                    }
                    });
                return builder.create();
            default:
                return null;
        }
    }
}
В результате при нажатии на кнопочку получаю пустое диалоговое окно, но при нажатии на ОК во всплывающем окошке вижу верный результат.
Подскажите, пожалуйста, что я делаю не так?
Или ссылочку где почитать...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Volley + AlertDialog

Сообщение rezak90 » 03 мар 2014, 20:02

Потому что ответ от сервера приходит после поднятия диалога, сначала нужно получить данные а потом их уже отображать. Или же отобразить диалог и после получения данных обновить лист. В уроках это все есть.
R.id.team
Политика на форуме запрещена

noobishe
Сообщения: 3
Зарегистрирован: 03 мар 2014, 17:06

Re: Volley + AlertDialog

Сообщение noobishe » 03 мар 2014, 21:21

спасибо, помогло..

Ответить