简体   繁体   English

如何从android中的mainactivity中的url获取数据

[英]how to fetch data from url in mainactivity in android

the code i am using is working very fine for me but the problem is i am not able to fetch that 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 new AsyncTaskParseJson().execute(); 这是代码新的AsyncTaskParseJson()。execute(); to make this thing 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 the data like firstname , lastname , username as variable in main activity . 我想在主要活动中获取firstname,lastname,username等变量等数据。

Is it possible ?? 可能吗 ??

this is my other class IncomingCall.java when i want to get the variables 当我想获取变量时,这是我的另一个类IncomingCall.java

           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 这是我的代码

Put your code in your Main Activity class, and then use class variables to store what you want, eg: 将您的代码放在Main Activity类中,然后使用类变量来存储您想要的内容,例如:

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 (it's without error checking, give it a try) 像这样的东西(它没有错误检查,试一试)

EDIT: be sure to have declared the internet permission in the android manifest: 编辑:一定要在android清单中声明互联网权限:

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

The method onPostExecute runs on the main thread, You need to use the data once the doInBackground finishes and control return to the main thread. onPostExecute方法在主线程上运行,一旦doInBackground完成并且控制返回主线程,你需要使用数据。

Better you use these data in the method 最好在方法中使用这些数据

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM