Java 如何使用最佳方式检索Json文件

Java 如何使用最佳方式检索Json文件,java,android,json,http,networking,Java,Android,Json,Http,Networking,我想显示包含特定子字符串的视频标题,例如videoName=“apple”: 因此,为了执行这个任务,我编写了一个代码来检索一个Json文件,并获取与这个名称相关的所有条目:(“+videoName+”&v=2&alt=Json”) 但不幸的是,我对这句话有异议: HttpResponse res = cli.execute(g); 这是我为获取json文件而编写的函数: String GetUrlBody (String Url ){ Log.d("s18", "

我想显示包含特定子字符串的视频标题,例如
videoName=“apple”

因此,为了执行这个任务,我编写了一个代码来检索一个Json文件,并获取与这个名称相关的所有条目:(“+videoName+”&v=2&alt=Json”) 但不幸的是,我对这句话有异议:

HttpResponse res = cli.execute(g);
这是我为获取json文件而编写的函数:

String GetUrlBody (String Url ){


            Log.d("s18", "ok");


            HttpClient cli = new DefaultHttpClient(); 

            Log.d("s19", "ok");


            HttpGet g = new HttpGet(Url); 

            Log.d("s20", "ok");


            try{

                Log.d("s21", "ok");

            HttpResponse res = cli.execute(g);

            Log.d("s22", "ok");


            if(res.getStatusLine().getStatusCode() == 200){

                Log.d("s23", "ok");


                String s =
            EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

                Log.d("s24", "ok");


                return s; 

            }else {

                Log.d("s25", "ok");

                return "Not Found"; 


            }




            }catch(Exception exx){

                Log.d("s26", "ok");

                Log.d("s27", exx.getMessage());



            }




            return null; 
        }
package com.example.task_10_vedioserach;

import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;

public class MainActivity extends Activity {

    ListView vediolist;
    ImageButton search;
    Button history;
    EditText title;
    /////////////////
    ArrayList<String > vl; 
    ArrayAdapter< String > ad ; 
    ProgressDialog pd ; 
    /////////////////

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

        vediolist = (ListView) findViewById(R.id.vedioList);
        search = (ImageButton) findViewById(R.id.search);
        history = (Button) findViewById(R.id.history);
        title=(EditText) findViewById(R.id.vedioName);

        /////////////////////////////////////////////////////////////////

          vl = new ArrayList<String>(); 
          ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1 , android.R.id.text1,vl); 

        //////////////////////////////////////////////////////////////
          Log.d("s0", "ok");

          search.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                final String vedioName=title.getText().toString();
                Log.d("s1", "ok");
                new conn().execute("https://gdata.youtube.com/feeds/api/videos?q="+vedioName+"&v=2&alt=json"); 
                Log.d("s2", "ok");
            }
        });

        pd = new ProgressDialog(this); 
        pd.setMessage("Wait Loading .... "); 
        pd.setCancelable(false); 
        vediolist.setAdapter(ad); 

    }



    class conn extends AsyncTask<String, Integer, String>{


        @Override
        protected void onPreExecute() {
            Log.d("s3", "ok");
             pd.show(); 
            super.onPreExecute();
            Log.d("s4", "ok");
        }
        @Override
        protected String doInBackground(String... arg0) {
            Log.d("s5", "ok");
            String s = GetUrlBody(arg0[0]); 
            Log.d("s6", "ok");
            return s;
        }

        @Override
        protected void onPostExecute(String result) {

            Log.d("s7", "ok");


        try{

            Log.d("s8", "ok");

            JSONObject jo =(JSONObject) new JSONTokener(result).nextValue();

            Log.d("s9", "ok");


        JSONObject feed = jo.optJSONObject("feed");
        Log.d("s10", "ok");

        JSONArray ent = feed.optJSONArray("entry");
        Log.d("s11", "ok");



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

        String ti = ent.getJSONObject(i).
                getJSONObject("title").getString("$t");
        vl.add(ti); 


        }

        Log.d("s12", "ok");


        ad.notifyDataSetChanged();
        Log.d("s13", "ok");

        }catch(Exception exx) {
            Log.d("s14", "ok");

        }

        Log.d("s15", "ok");

            pd.dismiss(); 
            Log.d("s16", "ok");

            super.onPostExecute(result); 
            Log.d("s17", "ok");


        } 




        String GetUrlBody (String Url ){


            Log.d("s18", "ok");


            HttpClient cli = new DefaultHttpClient(); 

            Log.d("s19", "ok");


            HttpGet g = new HttpGet(Url); 

            Log.d("s20", "ok");


            try{

                Log.d("s21", "ok");

            HttpResponse res = cli.execute(g);

            Log.d("s22", "ok");


            if(res.getStatusLine().getStatusCode() == 200){

                Log.d("s23", "ok");


                String s =
            EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

                Log.d("s24", "ok");


                return s; 

            }else {

                Log.d("s25", "ok");

                return "Not Found"; 


            }




            }catch(Exception exx){

                Log.d("s26", "ok");

                Log.d("s27", exx.getMessage());



            }




            return null; 
        }



    }
我的所有代码:

String GetUrlBody (String Url ){


            Log.d("s18", "ok");


            HttpClient cli = new DefaultHttpClient(); 

            Log.d("s19", "ok");


            HttpGet g = new HttpGet(Url); 

            Log.d("s20", "ok");


            try{

                Log.d("s21", "ok");

            HttpResponse res = cli.execute(g);

            Log.d("s22", "ok");


            if(res.getStatusLine().getStatusCode() == 200){

                Log.d("s23", "ok");


                String s =
            EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

                Log.d("s24", "ok");


                return s; 

            }else {

                Log.d("s25", "ok");

                return "Not Found"; 


            }




            }catch(Exception exx){

                Log.d("s26", "ok");

                Log.d("s27", exx.getMessage());



            }




            return null; 
        }
package com.example.task_10_vedioserach;

import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;

public class MainActivity extends Activity {

    ListView vediolist;
    ImageButton search;
    Button history;
    EditText title;
    /////////////////
    ArrayList<String > vl; 
    ArrayAdapter< String > ad ; 
    ProgressDialog pd ; 
    /////////////////

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

        vediolist = (ListView) findViewById(R.id.vedioList);
        search = (ImageButton) findViewById(R.id.search);
        history = (Button) findViewById(R.id.history);
        title=(EditText) findViewById(R.id.vedioName);

        /////////////////////////////////////////////////////////////////

          vl = new ArrayList<String>(); 
          ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1 , android.R.id.text1,vl); 

        //////////////////////////////////////////////////////////////
          Log.d("s0", "ok");

          search.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                final String vedioName=title.getText().toString();
                Log.d("s1", "ok");
                new conn().execute("https://gdata.youtube.com/feeds/api/videos?q="+vedioName+"&v=2&alt=json"); 
                Log.d("s2", "ok");
            }
        });

        pd = new ProgressDialog(this); 
        pd.setMessage("Wait Loading .... "); 
        pd.setCancelable(false); 
        vediolist.setAdapter(ad); 

    }



    class conn extends AsyncTask<String, Integer, String>{


        @Override
        protected void onPreExecute() {
            Log.d("s3", "ok");
             pd.show(); 
            super.onPreExecute();
            Log.d("s4", "ok");
        }
        @Override
        protected String doInBackground(String... arg0) {
            Log.d("s5", "ok");
            String s = GetUrlBody(arg0[0]); 
            Log.d("s6", "ok");
            return s;
        }

        @Override
        protected void onPostExecute(String result) {

            Log.d("s7", "ok");


        try{

            Log.d("s8", "ok");

            JSONObject jo =(JSONObject) new JSONTokener(result).nextValue();

            Log.d("s9", "ok");


        JSONObject feed = jo.optJSONObject("feed");
        Log.d("s10", "ok");

        JSONArray ent = feed.optJSONArray("entry");
        Log.d("s11", "ok");



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

        String ti = ent.getJSONObject(i).
                getJSONObject("title").getString("$t");
        vl.add(ti); 


        }

        Log.d("s12", "ok");


        ad.notifyDataSetChanged();
        Log.d("s13", "ok");

        }catch(Exception exx) {
            Log.d("s14", "ok");

        }

        Log.d("s15", "ok");

            pd.dismiss(); 
            Log.d("s16", "ok");

            super.onPostExecute(result); 
            Log.d("s17", "ok");


        } 




        String GetUrlBody (String Url ){


            Log.d("s18", "ok");


            HttpClient cli = new DefaultHttpClient(); 

            Log.d("s19", "ok");


            HttpGet g = new HttpGet(Url); 

            Log.d("s20", "ok");


            try{

                Log.d("s21", "ok");

            HttpResponse res = cli.execute(g);

            Log.d("s22", "ok");


            if(res.getStatusLine().getStatusCode() == 200){

                Log.d("s23", "ok");


                String s =
            EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

                Log.d("s24", "ok");


                return s; 

            }else {

                Log.d("s25", "ok");

                return "Not Found"; 


            }




            }catch(Exception exx){

                Log.d("s26", "ok");

                Log.d("s27", exx.getMessage());



            }




            return null; 
        }



    }
package.com.example.task_10_vedioserach;
导入java.util.ArrayList;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.protocol.http;
导入org.apache.http.util.EntityUtils;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入org.json.JSONTokener;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.app.ProgressDialog;
导入android.util.Log;
导入android.view.Menu;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageButton;
导入android.widget.ListView;
公共类MainActivity扩展了活动{
ListView视频编辑;
图像按钮搜索;
按钮历史;
编辑文本标题;
/////////////////
ArrayList vl;
阵列适配器ad;
进展性帕金森病;
/////////////////
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
视频列表=(ListView)findViewById(R.id.vediolist);
search=(ImageButton)findViewById(R.id.search);
历史=(按钮)findViewById(R.id.history);
title=(编辑文本)findViewById(R.id.vedioName);
/////////////////////////////////////////////////////////////////
vl=新的ArrayList();
ad=new ArrayAdapter(这个,android.R.layout.simple_list_item_1,android.R.id.text1,vl);
//////////////////////////////////////////////////////////////
日志d(“s0”、“ok”);
search.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终字符串vedioName=title.getText().toString();
日志d(“s1”、“ok”);
新建连接()。执行(“https://gdata.youtube.com/feeds/api/videos?q=“+vedioName+”&v=2&alt=json”);
Log.d(“s2”、“ok”);
}
});
pd=新进度对话框(本);
pd.setMessage(“等待加载…”);
pd.可设置可取消(假);
维迪奥主义者。设置适配器(ad);
}
类conn扩展异步任务{
@凌驾
受保护的void onPreExecute(){
日志d(“s3”,“ok”);
pd.show();
super.onPreExecute();
日志d(“s4”,“正常”);
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
日志d(“s5”,“正常”);
字符串s=GetUrlBody(arg0[0]);
日志d(“s6”,“ok”);
返回s;
}
@凌驾
受保护的void onPostExecute(字符串结果){
日志d(“s7”,“ok”);
试一试{
日志d(“s8”,“正常”);
JSONObject jo=(JSONObject)新的JSONTokener(result).nextValue();
Log.d(“s9”,“ok”);
JSONObject feed=jo.optJSONObject(“feed”);
日志d(“s10”,“正常”);
JSONArray ent=feed.optJSONArray(“条目”);
日志d(“s11”、“ok”);

对于(int i=0;i,我个人建议使用GSON和Jackson之类的工具。下面是链接:

格森:

杰克逊:


现在你必须明白,使用这些工具不仅仅是“为懒人准备的”。它们构造精良,映射速度快。在短时间内,它们将比您单独想到的任何算法/方法更快、更容易完成工作。希望这能有所帮助!

您在清单文件中是否具有Internet权限?
如果(jdata.has(“data”))有空值,请尝试使用可为空之前value@mromer:非常感谢,是的,这就是问题所在,我已经解决了。非常感谢