2017-03-07 12 views
2

このトピックに関連する質問は既にあります。
私はすべてのリンクを訪問しましたが、助けにはなりませんでした。MySQLからフェッチし、Volleyライブラリを使用してパラレルにUIを更新してください

私がしようとしているのは、AsyncTaskを使用せずにMySQLから値をフェッチし、UIをパラレルに更新することです。
私は別のアクティビティから取得している一意のIDに基づいて値を取得しています。

私はVolleyライブラリを使用しているので、AsyncTaskは必要ありません。
トーストのデータベースから値を取得していますが、UIを更新できません。ここで

は、どのように非同期的にUIを更新することができます私のクラス

public class DisplayInformationActivity extends Activity implements AppCompatCallback{ 
    private CollapsingToolbarLayout collapsingToolbarLayout; 
    protected AppCompatDelegate delegate; 
    protected String UniqueID; 
    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String,List<String>> listDataChild; 
    private ProgressDialog loading; 
    private String Name = ""; 
    private String contact = ""; 
    private String email = ""; 

    protected void onCreate(Bundle savedInstanceState){ 
     UniqueID = getIntent().getStringExtra("uniqueID"); 
     Toast.makeText(this,UniqueID, Toast.LENGTH_LONG).show(); 
     fetchEverything(UniqueID); 
     super.onCreate(savedInstanceState); 
     delegate = AppCompatDelegate.create(this,this); 
     delegate.onCreate(savedInstanceState); 
     delegate.setContentView(R.layout.displayhallinformation); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     delegate.setSupportActionBar(toolbar); 
     android.app.ActionBar actionBar = getActionBar(); 
     if(actionBar!=null) 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
     collapsingToolbarLayout.setTitle(Name); 
     dynamicToolbarColor(); 
     toolBarTextAppearance(); 
     expListView = (ExpandableListView) findViewById(R.id.expandableListView); 
     prepareListData(); 
     listAdapter = new ExpandableListAdapter(this,listDataHeader,listDataChild); 
     expListView.setAdapter(listAdapter); 
    } 

    private void fetchEverything(String uniqueID) { 
     RequestQueue mRequestQueue = AppController.getInstance().getRequestQueue(); 
     mRequestQueue.start(); 
     loading = ProgressDialog.show(this,"Loading Information ...","",false,false); 
     loading.setCancelable(false); 
     String url = AppConfig.URL_DisplayInformation+"?"+"uniqueID="+uniqueID; 
     StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       loading.dismiss(); 
       showJSON(response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     AppController.getInstance().addToRequestQueue(stringRequest); 
    } 

    private void showJSON(String response) { 
     try{ 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray result = jsonObject.getJSONArray(AppConfig.JSON_ARRAY); 
      JSONObject Data = result.getJSONObject(0); 
      Name = Data.getString(AppConfig.first_name)+" "+Data.getString(AppConfig.last_name); 
      contact = Data.getString(AppConfig.contact); 
      email = Data.getString(AppConfig.email); 
     }catch (JSONException e){ 
      e.printStackTrace(); 
     } 
     Toast.makeText(this, Name+" "+contact+" "+email, Toast.LENGTH_LONG).show(); 
    } 

    private void prepareListData() { 
     listDataHeader = new ArrayList<>(); 
     listDataChild = new HashMap<String,List<String>>(); 

     //Adding header to expandable list view 
     listDataHeader.add("Information"); 
     listDataHeader.add("Contact"); 
     //Adding child data 
     List<String> Information = new ArrayList<>(); 
     Information.add("Name : "+Name); 
     List<String> contact = new ArrayList<>(); 
     contact.add("Contact Number : "+ contact); 
     contact.add("Email : "+ email); 

     //Header child data 
     listDataChild.put(listDataHeader.get(0),Information); 
     listDataChild.put(listDataHeader.get(1),contact); 
    } 

    private void dynamicToolbarColor() { 
     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.images); 
     Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { 
      @Override 
      public void onGenerated(Palette palette) { 
       collapsingToolbarLayout.setContentScrimColor(palette.getMutedColor(ContextCompat.getColor(getApplicationContext(),R.color.colorPrimary))); 
       collapsingToolbarLayout.setStatusBarScrimColor(palette.getMutedColor(ContextCompat.getColor(getApplicationContext(),R.color.colorPrimaryDark))); 
      } 
     }); 
    } 

    private void toolBarTextAppearance() { 
     collapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.collapsedappbar); 
     collapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.expandedappbar); 
    } 

    @Override 
    public void onSupportActionModeStarted(ActionMode mode) { 

    } 

    @Override 
    public void onSupportActionModeFinished(ActionMode mode) { 

    } 

    @Nullable 
    @Override 
    public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) { 
     return null; 
    } 
} 

のですか?

+0

あなたはToastと同じように簡単にUIを更新できます...試してみるとどうなりますか? –

+0

値が更新されていません。私はタイトルを更新しようとしていますが、アップデートできず、トーストで値を取得できません。 –

+0

また、expandableListViewのUIを更新しようとしています –

答えて

0

私はどのようにしてパラレルに更新できますか?

「フロー」を整理する必要があります。

たとえば、後までで来ていない、

onCreate 
    fetchEverything 
    addToRequestQueue(stringRequest) 
     onResponse 
     showJSON 
      collapsingToolbarLayout.setTitle(Name) // <---- Move this here 
      prepareListData() // <---- Move this here 
      expListView = new ExpandableListAdapter... 
      expListView.setAdapter(listAdapter) // <--- Move this here 
      Update UI 
      // ^^^ This section your question? 

は現在、あなたのコードは、他の言葉で、だから、この

onCreate 
    fetchEverything 
    addToRequestQueue(stringRequest) 
    collapsingToolbarLayout.setTitle(Name) 
    prepareListData() 
    expListView = new ExpandableListAdapter... 
    expListView.setAdapter(listAdapter) 
... 
(some unknown future point) 
    onResponse 
    showJSON 
     Toast.makeText 

をやっているかもしれませんshowJSON(とあなたのバレーボールのデータを)(インデントは、メソッド呼び出しを意味します)既にツールバーとアダプタをセットアップしています。

+1

それはおかげで働いた。 –

関連する問題