从异步方法访问值到onCreate()

时间:2017-01-02 12:23:50

标签: android

您好我只想访问从api获取的字符串值到onCreate方法。我在下面发布我的代码。在getName类中,我得到了正确的名称但我无法访问oncreate方法中的值。我想将名称设置为欢迎管理员。我在getName类中尝试了此代码,但它调用了两次,以便在导航抽屉中显示两次。为了避免这种情况,我只想访问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();
    }
    }



    }

1 个答案:

答案 0 :(得分:0)

我只是在openActivity()中调用getname方法。请检查//这一条评论,这对我有用。

    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();
    }
    }



    }