Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中应用Asynctask和jsonparsing_Android_Json_Android Layout_Android Intent - Fatal编程技术网

如何在android中应用Asynctask和jsonparsing

如何在android中应用Asynctask和jsonparsing,android,json,android-layout,android-intent,Android,Json,Android Layout,Android Intent,我正在android中使用json解析应用asynctask,但它可以显示错误。 我的代码是 public class AndroidJSONParsingActivity extends ListActivity { // url to make request private static final String url = "http://203.110.93.84/trainee/yoga_api.php?category"; // JSON Node n

我正在android中使用json解析应用asynctask,但它可以显示错误。 我的代码是

public class AndroidJSONParsingActivity extends ListActivity {

    // url to make request
     private static final String url = "http://203.110.93.84/trainee/yoga_api.php?category";

    // JSON Node names          
    // Hashmap for ListView
            ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "yoga_name";
    private static final String TAG_CATEGORY = "category";
    private static final String TAG_DESC = "yoga_desc";
    private static final String TAG_URL = "yoga_url";
    String gender;
    // contacts JSONArray
    JSONArray contacts = null;
      Utility utility=new Utility();
      String json;
      private static String newurl="";

      Boolean isInternetPresent = false;

        // Connection detector class
        ConnectionDetector cd;
    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);

        cd = new ConnectionDetector(getApplicationContext());       
                isInternetPresent = cd.isConnectingToInternet();

                // check for Internet status
                if (isInternetPresent) {
                    // Internet Connection is Present
                    // make HTTP requests
                    //showAlertDialog(AndroidDetectInternetConnectionActivity.this, "Internet Connection","You have internet connection", true);
                    Intent myIntent = getIntent(); 
                    newurl=url+"="+myIntent.getSerializableExtra("catname").toString();


                } else {
                    // Internet connection is not present
                    // Ask user to connect to Internet
                    showAlertDialog(AndroidJSONParsingActivity.this, "No Internet Connection",
                            "You don't have internet connection.", false);
                }

                 new Async().execute(); 

            /*BackgroundAsyncTask task= new BackgroundAsyncTask();

            task.execute();*/


        // Creating JSON Parser instance
    //  JSONParser jParser = new JSONParser();



        /**
         * Updating parsed JSON data into ListView
         * */

        // selecting single ListView item
        ListView lv = getListView();

        // Launching new screen on Selecting Single ListItem
        lv.setOnItemClickListener(new OnItemClickListener() {


            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting values from selected ListItem

                String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                String cost = ((TextView) view.findViewById(R.id.email)).getText().toString();
                String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();

                // Starting new intent
                Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
                in.putExtra(TAG_NAME, name);
                in.putExtra(TAG_DESC, cost);
                in.putExtra(TAG_URL, description);
                startActivity(in);

            }
        });

    }
    class Async extends AsyncTask<String, Integer, String> {
          ProgressDialog dialog;  
          protected void onPreExecute()
          {  
           dialog=new ProgressDialog(AndroidJSONParsingActivity.this);
           dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
           dialog.setTitle("Loading");
           dialog.setMessage("Please Wait....");
           dialog.show();
          }  
          @Override
          protected String doInBackground(String... params) {

           // perform desired task in this doInBackground Block
                jsonparser();
           return "";
          }
          @Override
          protected void onProgressUpdate(Integer... values) {
           // TODO Auto-generated method stub
           super.onProgressUpdate(values);
         //  dialog.incrementProgressBy(5);   
           }

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

              }  
         } 
    public void jsonparser()
    {

        // getting JSON string from URL
        JSONObject c=null; 

    try {   
        json = utility.getResponse(newurl);
    //  Toast.makeText(getApplicationContext(),json, Toast.LENGTH_LONG).show();
        contacts = new JSONArray(json);
        for(int i = 0; i < contacts.length(); i++){
          c = contacts.getJSONObject(i);

            // Storing each json item in variable
            String id = c.getString(TAG_ID);
            String name = c.getString(TAG_NAME);
            String address = c.getString(TAG_DESC);
              gender = c.getString(TAG_URL);

            //Toast.makeText(getApplicationContext(),id, Toast.LENGTH_LONG).show();
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();


            // adding each child node to HashMap key => value
            map.put(TAG_ID, id);
            map.put(TAG_NAME, name);
            map.put(TAG_DESC, address);
            map.put(TAG_URL, gender);

            // adding HashList to ArrayList
            contactList.add(map);
        }
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (ClientProtocolException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    ListAdapter adapter = new SimpleAdapter(this, contactList,
            R.layout.list_item,
            new String[] { TAG_NAME, TAG_DESC, TAG_URL }, new int[] {
                    R.id.name, R.id.email, R.id.mobile });

    setListAdapter(adapter);

    }
}
公共类AndroidJSONParsingActivity扩展了ListActivity{
//发出请求的url
私有静态最终字符串url=”http://203.110.93.84/trainee/yoga_api.php?category";
//JSON节点名称
//ListView的Hashmap
ArrayList contactList=新建ArrayList();
私有静态最终字符串标记\u ID=“ID”;
私有静态最终字符串TAG_NAME=“yoga_NAME”;
私有静态最终字符串标记_CATEGORY=“CATEGORY”;
私有静态最终字符串标记_DESC=“yoga_DESC”;
私有静态最终字符串标记\u URL=“yoga\u URL”;
字符串性别;
//联系JSONArray
JSONArray联系人=null;
实用工具=新实用工具();
字符串json;
私有静态字符串newurl=“”;
布尔值isInternetPresent=false;
//连接检测器类
连接检测器cd;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
cd=新连接检测器(getApplicationContext());
isInternetPresent=cd.isConnectingToInternet();
//检查互联网状态
如果(isInternetPresent){
//存在Internet连接
//发出HTTP请求
//showAlertDialog(AndroidDetectionTernetConnectionActivity.this,“Internet连接”,“您有Internet连接”,true);
Intent myIntent=getIntent();
newurl=url+“=”+myIntent.getSerializableExtra(“catname”).toString();
}否则{
//Internet连接不存在
//要求用户连接到Internet
showAlertDialog(AndroidJSONParsingActivity.this,“无互联网连接”,
“您没有internet连接。”,false);
}
新建异步().execute();
/*BackgroundAsyncTask任务=新建BackgroundAsyncTask();
task.execute()*/
//创建JSON解析器实例
//JSONParser jParser=新的JSONParser();
/**
*将解析的JSON数据更新到ListView中
* */
//选择单个ListView项
ListView lv=getListView();
//在选择单个列表项时启动新屏幕
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//从选定的ListItem获取值
字符串名称=((TextView)view.findviewbyd(R.id.name)).getText().toString();
字符串成本=((TextView)view.findViewById(R.id.email)).getText().toString();
字符串描述=((TextView)view.findviewbyd(R.id.mobile)).getText().toString();
//开始新的意图
Intent in=新的Intent(getApplicationContext(),SingleMenuItemActivity.class);
in.putExtra(标签名称、名称);
额外费用(标签说明、成本);
in.putExtra(标记URL、说明);
星触觉(in);
}
});
}
类Async扩展了AsyncTask{
进程对话;
受保护的void onPreExecute()
{  
dialog=newprogressdialog(AndroidJSONParsingActivity.this);
setProgressStyle(ProgressDialog.STYLE_微调器);
对话框.setTitle(“加载”);
setMessage(“请稍候…”);
dialog.show();
}  
@凌驾
受保护的字符串doInBackground(字符串…参数){
//在此doInBackground块中执行所需任务
jsonparser();
返回“”;
}
@凌驾
受保护的void onProgressUpdate(整型…值){
//TODO自动生成的方法存根
super.onProgressUpdate(值);
//对话框。递增进度(5);
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
dialog.dismise();
}  
} 
public void jsonparser()
{
//从URL获取JSON字符串
JSONObject c=null;
试试{
json=utility.getResponse(newurl);
//Toast.makeText(getApplicationContext(),json,Toast.LENGTH_LONG.show();
联系人=新的JSONArray(json);
对于(int i=0;ivalue
地图放置(标签标识,标识);
地图放置(标签名称、名称);
地图放置(标签描述、地址);
地图放置(标签URL,性别);
//将哈希列表添加到ArrayList
联系人列表。添加(地图);
}
}捕获(不支持DencodingException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(客户端协议例外e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
ListAdapter=新的SimpleAdapter(此,contactList,
R.layout.list_项目,
新字符串[]{TAG_NAME,TAG_DESC,TAG_URL},新int[]{
R.id.name,R.id.email,
      02-23 16:16:16.616: D/dalvikvm(946): GC_FOR_MALLOC freed 2209 objects / 129344 bytes in 77ms
02-23 16:16:16.736: W/dalvikvm(946): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
02-23 16:16:16.756: E/AndroidRuntime(946): FATAL EXCEPTION: AsyncTask #1
02-23 16:16:16.756: E/AndroidRuntime(946): java.lang.RuntimeException: An error occured while executing doInBackground()
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.lang.Thread.run(Thread.java:1096)
02-23 16:16:16.756: E/AndroidRuntime(946): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.view.View.invalidate(View.java:5139)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.widget.AbsListView.resetList(AbsListView.java:1011)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.widget.ListView.resetList(ListView.java:493)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.widget.ListView.setAdapter(ListView.java:422)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.app.ListActivity.setListAdapter(ListActivity.java:267)
02-23 16:16:16.756: E/AndroidRuntime(946):  at com.callplanets.app.AndroidJSONParsingActivity.jsonparser(AndroidJSONParsingActivity.java:204)
02-23 16:16:16.756: E/AndroidRuntime(946):  at com.callplanets.app.AndroidJSONParsingActivity$Async.doInBackground(AndroidJSONParsingActivity.java:138)
02-23 16:16:16.756: E/AndroidRuntime(946):  at com.callplanets.app.AndroidJSONParsingActivity$Async.doInBackground(AndroidJSONParsingActivity.java:1)
02-23 16:16:16.756: E/AndroidRuntime(946):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-23 16:16:16.756: E/AndroidRuntime(946):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-23 16:16:16.756: E/AndroidRuntime(946):  ... 4 more
02-23 16:16:17.376: E/WindowManager(946): Activity com.callplanets.app.AndroidJSONParsingActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44ea7f00 that was originally added here
02-23 16:16:17.376: E/WindowManager(946): android.view.WindowLeaked: Activity com.callplanets.app.AndroidJSONParsingActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44ea7f00 that was originally added here
02-23 16:16:17.376: E/WindowManager(946):   at android.view.ViewRoot.<init>(ViewRoot.java:247)
02-23 16:16:17.376: E/WindowManager(946):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
02-23 16:16:17.376: E/WindowManager(946):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
02-23 16:16:17.376: E/WindowManager(946):   at android.view.Window$LocalWindowManager.addView(Window.java:424)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.Dialog.show(Dialog.java:241)
02-23 16:16:17.376: E/WindowManager(946):   at com.callplanets.app.AndroidJSONParsingActivity$Async.onPreExecute(AndroidJSONParsingActivity.java:132)
02-23 16:16:17.376: E/WindowManager(946):   at android.os.AsyncTask.execute(AsyncTask.java:391)
02-23 16:16:17.376: E/WindowManager(946):   at com.callplanets.app.AndroidJSONParsingActivity.onCreate(AndroidJSONParsingActivity.java:82)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-23 16:16:17.376: E/WindowManager(946):   at android.os.Handler.dispatchMessage(Handler.java:99)
02-23 16:16:17.376: E/WindowManager(946):   at android.os.Looper.loop(Looper.java:123)
02-23 16:16:17.376: E/WindowManager(946):   at android.app.ActivityThread.main(ActivityThread.java:4627)
02-23 16:16:17.376: E/WindowManager(946):   at java.lang.reflect.Method.invokeNative(Native Method)
02-23 16:16:17.376: E/WindowManager(946):   at java.lang.reflect.Method.invoke(Method.java:521)
02-23 16:16:17.376: E/WindowManager(946):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-23 16:16:17.376: E/WindowManager(946):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-23 16:16:17.376: E/WindowManager(946):   at dalvik.system.NativeStart.main(Native Method)
02-23 16:16:20.286: D/dalvikvm(956): GC_EXTERNAL_ALLOC freed 1053 objects / 70784 bytes in 83ms
cd = new ConnectionDetector(getApplicationContext());       
                isInternetPresent = cd.isConnectingToInternet();

                // check for Internet status
                if (isInternetPresent) {
                    // Internet Connection is Present
                    // make HTTP requests
                    //showAlertDialog(AndroidDetectInternetConnectionActivity.this, "Internet Connection","You have internet connection", true);
                    Intent myIntent = getIntent(); 
                    newurl=url+"="+myIntent.getSerializableExtra("catname").toString();

                      new Async().execute(); 


                } else {
                    // Internet connection is not present
                    // Ask user to connect to Internet
                    showAlertDialog(AndroidJSONParsingActivity.this, "No Internet Connection",
                            "You don't have internet connection.", false);
                }
@Override
           protected void onPostExecute(String result)
          {
            dialog.dismiss();    

              ListAdapter adapter = new SimpleAdapter(this, contactList,
                R.layout.list_item,
                new String[] { TAG_NAME, TAG_DESC, TAG_URL }, new int[] {
                        R.id.name, R.id.email, R.id.mobile });

        setListAdapter(adapter);

              }