簡體   English   中英

如何從android中的mainactivity中的url獲取數據

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

我正在使用的代碼對我來說非常好,但問題是我無法在主要活動中獲取該數據

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) {}
}

這是代碼新的AsyncTaskParseJson()。execute(); 使這件事有用

但我需要跑

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

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

我想在主要活動中獲取firstname,lastname,username等變量等數據。

可能嗎 ??

當我想獲取變量時,這是我的另一個類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);


    }
}

這是我的代碼

將您的代碼放在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) {}
    }
}

像這樣的東西(它沒有錯誤檢查,試一試)

編輯:一定要在android清單中聲明互聯網權限:

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

onPostExecute方法在主線程上運行,一旦doInBackground完成並且控制返回主線程,你需要使用數據。

最好在方法中使用這些數據

  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