2017-01-02 7 views
-1

Hallo Ich möchte nur auf den String-Wert zugreifen, die von der API erhalten, in die onCreate-Methode. Ich poste meinen Code unten. In der getName-Klasse bekomme ich den Namen richtig, aber ich kann nicht auf den Wert in der oncreate-Methode zugreifen. Ich möchte den Namen als Willkommens-Admin so einstellen. Ich habe diesen Code in der getName-Klasse ausprobiert, aber er ruft zweimal auf, so dass er zweimal in der Navigationsleiste angezeigt wird. Um dies zu vermeiden, möchte ich nur auf den String-Wert in der onCreate-Methode zugreifen. Vielen Dank im Voraus.Zugriffswert von Async-Methode auf OnCreate()

package com.abc; 

    import org.json.JSONArray; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

    import android.R.*; 
    import android.app.ActionBar; 
    import android.app.Activity; 
    import android.app.Dialog; 
    import android.content.Intent; 
    import android.graphics.Color; 
    import android.graphics.drawable.ColorDrawable; 
    import android.os.AsyncTask; 
    import android.os.BaseBundle; 
    import android.os.Bundle; 
    import android.support.v4.app.ActionBarDrawerToggle; 
    import android.support.v4.widget.DrawerLayout; 
    import android.util.Log; 
    import android.view.Gravity; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.Window; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.FrameLayout; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class navigation_drawer_class extends Activity 
    { 
    private static final int Copy = 0; 
    int a =0; 
    public static FrameLayout frameLayout; 
    TextView mytextview; 
    public static ListView mDrawerList; 
    public static String Fullname; 
    public DrawerLayout mDrawerLayout; 
    String str_Data=""; 
    protected String[] listArray = {"A","B","C","D ","E","F"," G"}; 
    protected static int position; 
    private static boolean isLaunch = true; 

    JSONObject post_details_obj,post_obj; 

    public static String FIRST_NAME="first_name",LAST_NAME="last_name",PROFILE_IMAGE="image_name"; 
    JSONArray staff_data_array; 

    private ActionBarDrawerToggle actionBarDrawerToggle; 
    Operation op=new Operation(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    //------------------ THIS ONE ------------------------- 
    getActionBar().setHomeAsUpIndicator(R.drawable.crop3);//THIS ONE FOR THE DRAWER LOGO 
    //--------------------- THIS ONE ---------------------- 

    frameLayout = (FrameLayout)findViewById(R.id.content_frame); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listArray)); 

    new getname.execute(); 

    mDrawerList.setOnItemClickListener(new OnItemClickListener() 
    { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
    int position, long id) 
    { 
    position -= mDrawerList.getHeaderViewsCount();//THIS ONE FOR THE FIRST ITEM AS TITLE 

    openActivity(position); 
    } 


    }); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    actionBarDrawerToggle = new ActionBarDrawerToggle(
    this,  // host Activity 
    mDrawerLayout,  // DrawerLayout object 
    R.drawable.ic_launcher,  // nav drawer image to replace 'Up' caret 
    R.string.open_drawer,  // "open drawer" description for accessibility 
    R.string.close_drawer)  // "close drawer" description for accessibility 
    { 
    @Override 
    public void onDrawerClosed(View drawerView) 
    { 
    getActionBar().setTitle(listArray[position]); 
    invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
    super.onDrawerClosed(drawerView); 
    } 

    @Override 
    public void onDrawerOpened(View drawerView) 
    { 
    getActionBar().setTitle(getString(R.string.app_name)); 
    invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
    super.onDrawerOpened(drawerView); 
    } 

    @Override 
    public void onDrawerSlide(View drawerView, float slideOffset) 
    { 
    super.onDrawerSlide(drawerView, slideOffset); 
    } 

    @Override 
    public void onDrawerStateChanged(int newState) 
    { 
    super.onDrawerStateChanged(newState); 
    } 
    }; 
    mDrawerLayout.setDrawerListener(actionBarDrawerToggle); 

    if(isLaunch){ 
    isLaunch = false; 
    openActivity(0); 

    } 
    } 

    protected void openActivity(int position) { 
    mDrawerLayout.closeDrawer(mDrawerList); 
    navigation_drawer_class.position = position; //Setting currently selected position in this field so that it will be available in our child activities. 

    switch (position) { 
    case 0: 
    startActivity(new Intent(this, A.class)); 

    break; 


    default: 


    break; 
    } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
    // getMenuInflater().inflate(R.menu.main, menu); 
    return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
    if (actionBarDrawerToggle.onOptionsItemSelected(item)) 
    { 
    return true; 
    } 
    switch (item.getItemId()) 
    { 
    default: 
    return super.onOptionsItemSelected(item); 
    } 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) 
    { 
    return super.onPrepareOptionsMenu(menu); 
    } 

    /* We can override onBackPressed method to toggle navigation drawer*/ 
    @Override 
    public void onBackPressed() 
    { 
    if(mDrawerLayout.isDrawerOpen(mDrawerList)) 
    { 
    mDrawerLayout.closeDrawer(mDrawerList); 
    } 
    else 
    { 
    mDrawerLayout.openDrawer(mDrawerList); 
    } 
    } 


    private class getname extends AsyncTask<Void, Void, JSONArray> 
    { 
    Dialog dialog; 

    @Override 
    public void onPreExecute() 
    { 
    dialog = new Dialog(navigation_drawer_class.this,android.R.style.Theme_Translucent_NoTitleBar); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.progressbar); 
    dialog.show(); 
    } 

    @Override 
    protected JSONArray doInBackground(Void... params) 
    { 

    String STAFF_URL=op.getUrl(getApplicationContext(),"staff","get_staff_details",""); 
    staff_data_array = JSONfunctions.getJSONfromURL(STAFF_URL+"&vis_encode=json",navigation_drawer_class.this); 
    return staff_data_array; 

    } 
    @Override 
    public void onPostExecute(JSONArray staff_data_array) 
    { 
    super.onPostExecute(staff_data_array); 
    String staff_data_result =staff_data_array.toString(); 

    try { 
    post_obj = staff_data_array.getJSONObject(0); 
    String fname=post_obj.getString(FIRST_NAME); 
    String lname=post_obj.getString(LAST_NAME); 
    String image=post_obj.getString(PROFILE_IMAGE); 

    String fullname =fname; 

    Fullname="Welcome "+fullname; 


    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    dialog.dismiss(); 
    } 
    } 



    } 
+0

Sie können nicht von onCreate darauf zugreifen - Sie können nicht davon ausgehen, dass 'getname' Task abgeschlossen wurde. Der einzige sichere Weg ist, den Wert von onPostExecute von 'getname' zu setzen, nur dann wissen Sie, dass Sie den Wert haben. Von dort sollten Sie den Wert, wo Sie wollen, setzen. – yakobom

+0

Zugriff auf den String-Wert bei onCreate-Methode ist wirklich eine schlechte Idee, weil asyncTask einige Zeit dauern wird, um ausführen und erhalten Sie die Benutzernamen-Info. Und Sie müssen etwas falsch machen, weil der obige Codename nur einmal in der Variablen gespeichert wird. –

+0

@yakobom: Wie man den Wert von onPostExecute setzt? Kannst du mir ein Beispiel geben. Bcoz Ich bin neu bei Android. –

Antwort

0

Ich nenne nur GetName-Methode in openActivity() für mich, den Kommentar wie // diese und es funktioniert .Bitte zu überprüfen.

package com.abc; 

    import org.json.JSONArray; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

    import android.R.*; 
    import android.app.ActionBar; 
    import android.app.Activity; 
    import android.app.Dialog; 
    import android.content.Intent; 
    import android.graphics.Color; 
    import android.graphics.drawable.ColorDrawable; 
    import android.os.AsyncTask; 
    import android.os.BaseBundle; 
    import android.os.Bundle; 
    import android.support.v4.app.ActionBarDrawerToggle; 
    import android.support.v4.widget.DrawerLayout; 
    import android.util.Log; 
    import android.view.Gravity; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.Window; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.FrameLayout; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class navigation_drawer_class extends Activity 
    { 
    private static final int Copy = 0; 
    int a =0; 
    public static FrameLayout frameLayout; 
    TextView mytextview; 
    public static ListView mDrawerList; 
    public static String Fullname; 
    public DrawerLayout mDrawerLayout; 
    String str_Data=""; 
    protected String[] listArray = {"A","B","C","D ","E","F"," G"}; 
    protected static int position; 
    private static boolean isLaunch = true; 

    JSONObject post_details_obj,post_obj; 

    public static String FIRST_NAME="first_name",LAST_NAME="last_name",PROFILE_IMAGE="image_name"; 
    JSONArray staff_data_array; 

    private ActionBarDrawerToggle actionBarDrawerToggle; 
    Operation op=new Operation(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 


    getActionBar().setHomeAsUpIndicator(R.drawable.crop3); 


    frameLayout = (FrameLayout)findViewById(R.id.content_frame); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listArray)); 

    //new getname.execute(); //THIS ONE TO 

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

    openActivity(position); 
    } 


    }); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    actionBarDrawerToggle = new ActionBarDrawerToggle(
    this,  // host Activity 
    mDrawerLayout,  // DrawerLayout object 
    R.drawable.ic_launcher,  // nav drawer image to replace 'Up' caret 
    R.string.open_drawer,  // "open drawer" description for accessibility 
    R.string.close_drawer)  // "close drawer" description for accessibility 
    { 
    @Override 
    public void onDrawerClosed(View drawerView) 
    { 
    getActionBar().setTitle(listArray[position]); 
    invalidateOptionsMenu(); 
    super.onDrawerClosed(drawerView); 
    } 

    @Override 
    public void onDrawerOpened(View drawerView) 
    { 
    getActionBar().setTitle(getString(R.string.app_name)); 
    invalidateOptionsMenu(); 
    super.onDrawerOpened(drawerView); 
    } 

    @Override 
    public void onDrawerSlide(View drawerView, float slideOffset) 
    { 
    super.onDrawerSlide(drawerView, slideOffset); 
    } 

    @Override 
    public void onDrawerStateChanged(int newState) 
    { 
    super.onDrawerStateChanged(newState); 
    } 
    }; 
    mDrawerLayout.setDrawerListener(actionBarDrawerToggle); 

    if(isLaunch){ 
    isLaunch = false; 
    openActivity(0); 

    } 
    } 

    protected void openActivity(int position) { 

     new getname.execute(); //THIS ONE Here 


    mDrawerLayout.closeDrawer(mDrawerList); 
    navigation_drawer_class.position = position; 

    switch (position) { 
    case 0: 
    startActivity(new Intent(this, A.class)); 

    break; 


    default: 


    break; 
    } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 

    return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
    if (actionBarDrawerToggle.onOptionsItemSelected(item)) 
    { 
    return true; 
    } 
    switch (item.getItemId()) 
    { 
    default: 
    return super.onOptionsItemSelected(item); 
    } 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) 
    { 
    return super.onPrepareOptionsMenu(menu); 
    } 


    @Override 
    public void onBackPressed() 
    { 
    if(mDrawerLayout.isDrawerOpen(mDrawerList)) 
    { 
    mDrawerLayout.closeDrawer(mDrawerList); 
    } 
    else 
    { 
    mDrawerLayout.openDrawer(mDrawerList); 
    } 
    } 


    private class getname extends AsyncTask<Void, Void, JSONArray> 
    { 
    Dialog dialog; 

    @Override 
    public void onPreExecute() 
    { 
    dialog = new Dialog(navigation_drawer_class.this,android.R.style.Theme_Translucent_NoTitleBar); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.progressbar); 
    dialog.show(); 
    } 

    @Override 
    protected JSONArray doInBackground(Void... params) 
    { 

    String STAFF_URL=op.getUrl(getApplicationContext(),"staff","get_staff_details",""); 
    staff_data_array = JSONfunctions.getJSONfromURL(STAFF_URL+"&vis_encode=json",navigation_drawer_class.this); 
    return staff_data_array; 

    } 
    @Override 
    public void onPostExecute(JSONArray staff_data_array) 
    { 
    super.onPostExecute(staff_data_array); 
    String staff_data_result =staff_data_array.toString(); 

    try { 
    post_obj = staff_data_array.getJSONObject(0); 
    String fname=post_obj.getString(FIRST_NAME); 
    String lname=post_obj.getString(LAST_NAME); 
    String image=post_obj.getString(PROFILE_IMAGE); 

    String fullname =fname; 

    Fullname="Welcome "+fullname; 


    } catch (JSONException e) { 

    e.printStackTrace(); 
    } 

    dialog.dismiss(); 
    } 
    } 



    } 
Verwandte Themen