Java JSON解析中的Asyntask

Java JSON解析中的Asyntask,java,android,Java,Android,这是我的示例代码,在这里我创建了一个json解析类来解析来自给定链接的数据 package com.billosuch.listviewblogpost; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle;

这是我的示例代码,在这里我创建了一个json解析类来解析来自给定链接的数据

package com.billosuch.listviewblogpost;

import java.util.ArrayList;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;

public class ListViewBlogPost extends Activity {

    // url to make request
    private static String url = "http://api.androidhive.info/contacts/";

    // JSON Node names
    private static final String TAG_CONTACTS = "contacts";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_EMAIL = "email";
    private static final String TAG_ADDRESS = "address";
    private static final String TAG_GENDER = "gender";
    private static final String TAG_PHONE = "phone";
    private static final String TAG_PHONE_MOBILE = "mobile";
    private static final String TAG_PHONE_HOME = "home";
    private static final String TAG_PHONE_OFFICE = "office";

    // contacts JSONArray
    JSONArray contacts = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayList<SearchResults> searchResultss = new ArrayList<SearchResults>();
        final ListView lv1 = (ListView) findViewById(R.id.ListView01);

        JSONParser jparser = new JSONParser();
        JSONObject json = jparser.getJSONFromUrl(url);

        // looping through All Contacts

        Log.d("*********oSR", "B4 TRy");

        try {

            contacts = json.getJSONArray(TAG_CONTACTS);

            for (int i = 0; i < contacts.length(); i++) {

                SearchResults oSR = new SearchResults();
                JSONObject c = contacts.getJSONObject(i);

                oSR.setId(c.getString(TAG_ID));
                oSR.setName(c.getString(TAG_NAME));
                oSR.setEmail(c.getString(TAG_EMAIL));
                oSR.setAddress(c.getString(TAG_ADDRESS));
                oSR.setGender(c.getString(TAG_GENDER));

                JSONObject phone = c.getJSONObject(TAG_PHONE);

                oSR.setPhone_mobile(phone.getString(TAG_PHONE_MOBILE));
                oSR.setPhone_home(phone.getString(TAG_PHONE_HOME));
                oSR.setPhone_office(phone.getString(TAG_PHONE_OFFICE));

                searchResultss.add(oSR);

                Log.d("*********oSR", oSR.getName());

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

        Log.d("*********oSR", "AFTER TRy");
        lv1.setAdapter(new MyCustomBaseAdapter(this, searchResultss));

    }


}

为此,您应该使用asynctask,并将与网络相关的代码移到doinBackground()中

在UI线程上加载异步任务,如下所示

  new TheTask().execute()
异步任务类

  class TheTask extends AsyncTask<Void,Void,Void>
  {
  protected void onPreExecute()
  {           super.onPreExecute();
            //display progressdialog.
  } 

   protected void doInBackground(Void ...params)
  {  
        //Network related opearaiton. Do not update ui here

        return null;
  } 

   protected void onPostExecute(Void result)
  {     
            super.onPostExecute(result);
            //dismiss progressdialog.
            //update ui
  } 

 }
class任务扩展异步任务
{
受保护的void onPreExecute()
{super.onPreExecute();
//显示进度对话框。
} 
受保护的void doInBackground(void…参数)
{  
//网络相关操作。请勿在此更新用户界面
返回null;
} 
受保护的void onPostExecute(void结果)
{     
super.onPostExecute(结果);
//关闭进程对话框。
//更新用户界面
} 
}

您可以将URL传递给asynctask的构造函数,也可以直接传递给doInbackground()

您当前正在UI线程中发出服务器请求。当应用程序等待服务器响应时,用户界面冻结,这是一种糟糕的用户体验。使用
AsyncTask
将数据加载到另一个线程中,并在收到服务器响应时更新UI


像这样上长作业课

private class LongOperation extends AsyncTask<String, Void, String> {

      @Override
      protected String doInBackground(String... params) {
            JSONParser jparser = new JSONParser();
    JSONObject json = jparser.getJSONFromUrl(url);

    // looping through All Contacts

    Log.d("*********oSR", "B4 TRy");

    try {

        contacts = json.getJSONArray(TAG_CONTACTS);

        for (int i = 0; i < contacts.length(); i++) {

            SearchResults oSR = new SearchResults();
            JSONObject c = contacts.getJSONObject(i);

            oSR.setId(c.getString(TAG_ID));
            oSR.setName(c.getString(TAG_NAME));
            oSR.setEmail(c.getString(TAG_EMAIL));
            oSR.setAddress(c.getString(TAG_ADDRESS));
            oSR.setGender(c.getString(TAG_GENDER));

            JSONObject phone = c.getJSONObject(TAG_PHONE);

            oSR.setPhone_mobile(phone.getString(TAG_PHONE_MOBILE));
            oSR.setPhone_home(phone.getString(TAG_PHONE_HOME));
            oSR.setPhone_office(phone.getString(TAG_PHONE_OFFICE));

            searchResultss.add(oSR);

            Log.d("*********oSR", oSR.getName());

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


            return null;
      }      

      @Override
      protected void onPostExecute(String result) {
             lv1.setAdapter(new MyCustomBaseAdapter(this, searchResultss));
            //might want to change "executed" for the returned string passed into onPostExecute() but that is upto you
      }

      @Override
      protected void onPreExecute() {
      }

      @Override
      protected void onProgressUpdate(Void... values) {

      }
}
私有类LongOperation扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
JSONParser jparser=新的JSONParser();
JSONObject json=jparser.getJSONFromUrl(url);
//通过所有触点循环
Log.d(“*********oSR”,“B4 TRy”);
试一试{
contacts=json.getJSONArray(TAG_contacts);
对于(int i=0;i
如下更改代码

package com.billosuch.listviewblogpost;

    import java.util.ArrayList;

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

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListView;

    public class ListViewBlogPost extends Activity {

        // url to make request
        private static String url = "http://api.androidhive.info/contacts/";

        // JSON Node names
        private static final String TAG_CONTACTS = "contacts";
        private static final String TAG_ID = "id";
        private static final String TAG_NAME = "name";
        private static final String TAG_EMAIL = "email";
        private static final String TAG_ADDRESS = "address";
        private static final String TAG_GENDER = "gender";
        private static final String TAG_PHONE = "phone";
        private static final String TAG_PHONE_MOBILE = "mobile";
        private static final String TAG_PHONE_HOME = "home";
        private static final String TAG_PHONE_OFFICE = "office";
        final ListView lv1;
        ArrayList<SearchResults> searchResultss;

        // contacts JSONArray
        JSONArray contacts = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            searchResultss = new ArrayList<SearchResults>();
            lv1 = (ListView) findViewById(R.id.ListView01);

           new MyAsync(Youractivity.this).execute();

        }





    public class MyAsync extends AsyncTask<Void, Integer, Void> {



            public MyAsync(Activity activity) {
                this.activity = activity;


                context = activity;
                dialog = new ProgressDialog(context);


            }

            /** progress dialog to show user that the backup is processing. */
            private ProgressDialog dialog;
            /** application context. */
            private Activity activity;
            private Context context;



            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();






            }

            @Override
            protected Void doInBackground(Void... params) {
                // TODO Auto-generated method stub


     JSONParser jparser = new JSONParser();
            JSONObject json = jparser.getJSONFromUrl(url);

            // looping through All Contacts

            Log.d("*********oSR", "B4 TRy");

            try {

                contacts = json.getJSONArray(TAG_CONTACTS);

                for (int i = 0; i < contacts.length(); i++) {

                    SearchResults oSR = new SearchResults();
                    JSONObject c = contacts.getJSONObject(i);

                    oSR.setId(c.getString(TAG_ID));
                    oSR.setName(c.getString(TAG_NAME));
                    oSR.setEmail(c.getString(TAG_EMAIL));
                    oSR.setAddress(c.getString(TAG_ADDRESS));
                    oSR.setGender(c.getString(TAG_GENDER));

                    JSONObject phone = c.getJSONObject(TAG_PHONE);

                    oSR.setPhone_mobile(phone.getString(TAG_PHONE_MOBILE));
                    oSR.setPhone_home(phone.getString(TAG_PHONE_HOME));
                    oSR.setPhone_office(phone.getString(TAG_PHONE_OFFICE));

                    searchResultss.add(oSR);

                    Log.d("*********oSR", oSR.getName());

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

            Log.d("*********oSR", "AFTER TRy");


                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);

                            lv1.setAdapter(new MyCustomBaseAdapter(this, searchResultss));



                             }



          }
    }
package com.billosch.listviewblogpost;
导入java.util.ArrayList;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.ListView;
公共类ListViewBlogPost扩展活动{
//发出请求的url
专用静态字符串url=”http://api.androidhive.info/contacts/";
//JSON节点名称
专用静态最终字符串标记_CONTACTS=“CONTACTS”;
私有静态最终字符串标记\u ID=“ID”;
私有静态最终字符串标记_NAME=“NAME”;
私有静态最终字符串标记\u EMAIL=“EMAIL”;
私有静态最终字符串标记_ADDRESS=“ADDRESS”;
私有静态最终字符串标记_GENDER=“GENDER”;
专用静态最终字符串标记_PHONE=“PHONE”;
专用静态最终字符串标记\u PHONE\u MOBILE=“MOBILE”;
专用静态最终字符串标记\u PHONE\u HOME=“HOME”;
专用静态最终字符串标记\u PHONE\u OFFICE=“OFFICE”;
最终列表视图1级;
ArrayList SearchResults;
//联系JSONArray
JSONArray联系人=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
searchResultss=新的ArrayList();
lv1=(ListView)findViewById(R.id.ListView01);
新建MyAsync(Youractivity.this).execute();
}
公共类MyAsync扩展了AsyncTask{
公共MyAsync(活动){
这个。活动=活动;
上下文=活动;
dialog=新建进度对话框(上下文);
}
/**“进度”对话框,向用户显示备份正在处理*/
私人对话;
/**应用程序上下文*/
私人活动;
私人语境;
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
JSONParser jparser=新的JSONParser();
JSONObject json=jparser.getJSONFromUrl(url);
//通过所有触点循环
Log.d(“*********oSR”,“B4 TRy”);
试一试{
contacts=json.getJSONArray(TAG_contacts);
对于(int i=0;ipackage com.billosuch.listviewblogpost;

    import java.util.ArrayList;

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

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListView;

    public class ListViewBlogPost extends Activity {

        // url to make request
        private static String url = "http://api.androidhive.info/contacts/";

        // JSON Node names
        private static final String TAG_CONTACTS = "contacts";
        private static final String TAG_ID = "id";
        private static final String TAG_NAME = "name";
        private static final String TAG_EMAIL = "email";
        private static final String TAG_ADDRESS = "address";
        private static final String TAG_GENDER = "gender";
        private static final String TAG_PHONE = "phone";
        private static final String TAG_PHONE_MOBILE = "mobile";
        private static final String TAG_PHONE_HOME = "home";
        private static final String TAG_PHONE_OFFICE = "office";
        final ListView lv1;
        ArrayList<SearchResults> searchResultss;

        // contacts JSONArray
        JSONArray contacts = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            searchResultss = new ArrayList<SearchResults>();
            lv1 = (ListView) findViewById(R.id.ListView01);

           new MyAsync(Youractivity.this).execute();

        }





    public class MyAsync extends AsyncTask<Void, Integer, Void> {



            public MyAsync(Activity activity) {
                this.activity = activity;


                context = activity;
                dialog = new ProgressDialog(context);


            }

            /** progress dialog to show user that the backup is processing. */
            private ProgressDialog dialog;
            /** application context. */
            private Activity activity;
            private Context context;



            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();






            }

            @Override
            protected Void doInBackground(Void... params) {
                // TODO Auto-generated method stub


     JSONParser jparser = new JSONParser();
            JSONObject json = jparser.getJSONFromUrl(url);

            // looping through All Contacts

            Log.d("*********oSR", "B4 TRy");

            try {

                contacts = json.getJSONArray(TAG_CONTACTS);

                for (int i = 0; i < contacts.length(); i++) {

                    SearchResults oSR = new SearchResults();
                    JSONObject c = contacts.getJSONObject(i);

                    oSR.setId(c.getString(TAG_ID));
                    oSR.setName(c.getString(TAG_NAME));
                    oSR.setEmail(c.getString(TAG_EMAIL));
                    oSR.setAddress(c.getString(TAG_ADDRESS));
                    oSR.setGender(c.getString(TAG_GENDER));

                    JSONObject phone = c.getJSONObject(TAG_PHONE);

                    oSR.setPhone_mobile(phone.getString(TAG_PHONE_MOBILE));
                    oSR.setPhone_home(phone.getString(TAG_PHONE_HOME));
                    oSR.setPhone_office(phone.getString(TAG_PHONE_OFFICE));

                    searchResultss.add(oSR);

                    Log.d("*********oSR", oSR.getName());

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

            Log.d("*********oSR", "AFTER TRy");


                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);

                            lv1.setAdapter(new MyCustomBaseAdapter(this, searchResultss));



                             }



          }
    }
package com.billosuch.listviewblogpost;

import java.util.ArrayList;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;

public class ListViewBlogPost extends Activity {

// url to make request
private static String url = "http://api.androidhive.info/contacts/";

// JSON Node names
private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_EMAIL = "email";
private static final String TAG_ADDRESS = "address";
private static final String TAG_GENDER = "gender";
private static final String TAG_PHONE = "phone";
private static final String TAG_PHONE_MOBILE = "mobile";
private static final String TAG_PHONE_HOME = "home";
private static final String TAG_PHONE_OFFICE = "office";

// contacts JSONArray
JSONArray contacts = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ArrayList<SearchResults> searchResultss = new ArrayList<SearchResults>();
    final ListView lv1 = (ListView) findViewById(R.id.ListView01);

new MyTask().execute(url);

class MyTask extends AsyncTask<String, Void, String> {

    ProgressDialog pDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(SocialActivity.this);
        pDialog.setMessage("Loading...");
        pDialog.setCancelable(true);
        pDialog.show();
    }

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

                      JSONParser jparser = new JSONParser();
                      JSONObject json = jparser.getJSONFromUrl(params[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        if (null != pDialog && pDialog.isShowing()) {
            pDialog.dismiss();
        }

        if (null == result || result.length() == 0) {
            showToast("No data found from web!!!");
            YourActivity.this.finish();
        } else {

            try {
contacts = json.getJSONArray(TAG_CONTACTS);

        for (int i = 0; i < contacts.length(); i++) {

            SearchResults oSR = new SearchResults();
            JSONObject c = contacts.getJSONObject(i);

            oSR.setId(c.getString(TAG_ID));
            oSR.setName(c.getString(TAG_NAME));
            oSR.setEmail(c.getString(TAG_EMAIL));
            oSR.setAddress(c.getString(TAG_ADDRESS));
            oSR.setGender(c.getString(TAG_GENDER));

            JSONObject phone = c.getJSONObject(TAG_PHONE);

            oSR.setPhone_mobile(phone.getString(TAG_PHONE_MOBILE));
            oSR.setPhone_home(phone.getString(TAG_PHONE_HOME));
            oSR.setPhone_office(phone.getString(TAG_PHONE_OFFICE));

            searchResultss.add(oSR);

            Log.d("*********oSR", oSR.getName());

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

    Log.d("*********oSR", "AFTER TRy");
    lv1.setAdapter(new MyCustomBaseAdapter(this, searchResultss));

}


}