How to get data from url to mainactivity in android

the code i am using works really well for me, but the problem is i cant retrieve this data in main activity.

public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    final String TAG = "AsyncTaskParseJson.java";

    // set your json string url here
    String yourJsonStringUrl = "http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php";

    // contacts JSONArray
    JSONArray dataJsonArr = null;

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... arg0) {

        try {

            // instantiate our json parser
            JsonParser jParser = new JsonParser();

            // get json string from url
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

            // get the array of users
            dataJsonArr = json.getJSONArray("Users");

            // loop through all users
            for (int i = 0; i < dataJsonArr.length(); i++) {

                JSONObject c = dataJsonArr.getJSONObject(i);

                // Storing each json item in variable
                String firstname = c.getString("firstname");
                String lastname = c.getString("lastname");
                String username = c.getString("username");

                // show the values in our logcat
                Log.e(TAG, "firstname: " + firstname 
                        + ", lastname: " + lastname
                        + ", username: " + username);

            }

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

        return null;
    }

    @Override
    protected void onPostExecute(String strFromDoInBg) {}
}

      

this is the code for the new AsyncTaskParseJson (). execute (); to make this work

but i need to run

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

    // we will using AsyncTask during parsing 
    new AsyncTaskParseJson().execute();
}`

      

I want to get data as first name, last name, username as a variable in the main activity.

Is it possible?

this is my other class IncomingCall.java when i want to get the variables

           public class IncomingCall extends BroadcastReceiver {
private String firstname;
private String lastname;
private String username;




  public void onReceive (Context context, Intent intent) {
  // TODO Auto-generated method stub



    Toast.makeText(context, " Calling "+username, Toast.LENGTH_LONG).show();    

    try {

        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                 TelephonyManager.EXTRA_STATE_IDLE)
                 || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                         TelephonyManager.EXTRA_STATE_OFFHOOK)) {
            notifyuser=true;

        }

    } catch (Exception e) {
        // TODO: handle exception

        //Toast.makeText(context, "Error detected 1 "+e, Toast.LENGTH_LONG).show(); 

    }
  }


  public class AsyncTaskParseJson extends AsyncTask<String, String, String>      {

    final String TAG = "AsyncTaskParseJson.java";

    // set your json string url here
    String yourJsonStringUrl =     "http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php";

    // contacts JSONArray
    JSONArray dataJsonArr = null;

    @Override
    protected void onPreExecute() {}

    @Override

    protected String doInBackground(String... arg0) {

        try {

            // instantiate our json parser
            JsonParser jParser = new JsonParser();

            // get json string from url
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

            // get the array of users
            dataJsonArr = json.getJSONArray("Users");

            // loop through all users
           // for (int i = 0; i < dataJsonArr.length(); i++) {

                JSONObject c = dataJsonArr.getJSONObject(0);

                // Storing each json item in variable
                firstname = c.getString("firstname");
                lastname = c.getString("lastname");
                username = c.getString("username");

                // show the values in our logcat
                Log.e(TAG, "firstname: " + firstname 
                        + ", lastname: " + lastname
                        + ", username: " + username);

           // }

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

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //Here you use your variables
            }
        });

        return null;
    }

    protected void onPostExecute(String strFromDoInBg) {


         Log.e("TAG1", "firstname: " + firstname 
                 + ", lastname: " + lastname
                 + ", username: " + username);


    }
}

      

this is my code

+3


source to share


2 answers


Put your code in your main activity class and then use class variables to store what you want, like this:

public class MainActivity extends Activity {

    private String[] firstname;
    private String[] lastname;
    private String[] username;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new AsyncTaskParseJson().execute();

    }

    public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

        final String TAG = "AsyncTaskParseJson.java";

        // set your json string url here
        String yourJsonStringUrl =     "http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php";

        // contacts JSONArray
        JSONArray dataJsonArr = null;

        @Override
        protected void onPreExecute() {}

        @Override
        protected String doInBackground(String... arg0) {

            try {

                // instantiate our json parser
                JsonParser jParser = new JsonParser();

                // get json string from url
                JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

                // get the array of users
                dataJsonArr = json.getJSONArray("Users");


                firstname = new String[dataJsonArr.length()];
                lastname = new String[dataJsonArr.length()];
                username = new String[dataJsonArr.length()];

                // loop through all users
                for (int i = 0; i < dataJsonArr.length(); i++) {

                    JSONObject c = dataJsonArr.getJSONObject(i);

                    // Storing each json item in variable
                    firstname[i] = c.getString("firstname");
                    lastname[i] = c.getString("lastname");
                    username[i] = c.getString("username");

                    // show the values in our logcat
                    Log.e(TAG, "firstname: " + firstname 
                            + ", lastname: " + lastname
                            + ", username: " + username);

                }

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

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //Here you use your variables
                }
            });

            return null;
        }

        @Override
        protected void onPostExecute(String strFromDoInBg) {}
    }
}

      

Something like this (no error checking, try it)



EDIT: Make sure to declare internet permission in android manifest:

<uses-permission android:name="android.permission.INTERNET" />

      

+1


source


The onPostExecute method runs on the main thread, you must use the data as soon as doInBackground finishes and returns to the main thread.

Better to use this data in a method



  protected void onPostExecute(String strFromDoInBg) {
   // use the firstname , lastname or username after this method call.
   }

      

+1


source







All Articles