Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Java 从目标主机获取JSON对象。错误:目标主机不能为空_Java_Android_Json - Fatal编程技术网

Java 从目标主机获取JSON对象。错误:目标主机不能为空

Java 从目标主机获取JSON对象。错误:目标主机不能为空,java,android,json,Java,Android,Json,我现在正试图弄清楚JSON是如何工作的,所以我想还有什么比做一个JSON阅读项目更好的方法呢!我希望用户使用EditText和Search按钮供用户使用,并找出用户输入的网站是否有任何JSON,然后将其显示在文本框中。现在我正在测试这个网站:itunes.apple.com/search?term= 正如您在我的代码中所看到的,我只是在设置这些变量,而不使用EditText和Search按钮,直到我可以让它工作为止。我得到以下错误: 11-03 20:30:58.545: E/AndroidRu

我现在正试图弄清楚JSON是如何工作的,所以我想还有什么比做一个JSON阅读项目更好的方法呢!我希望用户使用EditText和Search按钮供用户使用,并找出用户输入的网站是否有任何JSON,然后将其显示在文本框中。现在我正在测试这个网站:itunes.apple.com/search?term=

正如您在我的代码中所看到的,我只是在设置这些变量,而不使用EditText和Search按钮,直到我可以让它工作为止。我得到以下错误:

11-03 20:30:58.545: E/AndroidRuntime(8608): FATAL EXCEPTION: AsyncTask #1
11-03 20:30:58.545: E/AndroidRuntime(8608): java.lang.RuntimeException: An error occured while executing doInBackground()
11-03 20:30:58.545: E/AndroidRuntime(8608):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-03 20:30:58.545: E/AndroidRuntime(8608):     at java.lang.Thread.run(Thread.java:856)
11-03 20:30:58.545: E/AndroidRuntime(8608): Caused by: java.lang.IllegalStateException:
 Target host must not be null, or set in parameters. scheme=null, host=null, path=itunes.apple.com/search
我相信这是因为下面这行代码:HttpResponse r=client.execute(get)但我不知道该如何更正主机为空。我觉得这和问号或其他东西有关。或者我只是用错误的方式来处理这个问题。请考虑到这是我第一个使用JSON的项目。也许我需要一个简单的关于使用JSON的教程,这样我才能彻底理解它。谢谢

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

TextView fetchText;
EditText httpEntryBox,jsonEntryBox;
Button search_button_http, search_button_json;
HTTP_Fetcher http_fetch;

HttpClient client;
final static String URL = "itunes.apple.com/search?term=";
JSONObject json;
InputMethodManager imm;

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

    fetchText = (TextView) findViewById(R.id.fetchText);

    client = new DefaultHttpClient();
    new Read().execute("artistName");


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public JSONObject search( String searchItem ) throws ClientProtocolException, IOException, JSONException, URISyntaxException{
    StringBuilder url = new StringBuilder(URL);
    url.append(searchItem);

    String finished_url = url.toString();

    HttpGet get = new HttpGet(finished_url);
    HttpResponse r = client.execute(get);

    int status = r.getStatusLine().getStatusCode();

    if (status == 200){
        HttpEntity e = r.getEntity();
        String data = EntityUtils.toString(e);
        JSONArray array = new JSONArray(data);
        return array.getJSONObject(0);
    }else{
        Log.e("Search","fetch error");
        return null;
    }


}

public class Read extends AsyncTask<String, Integer, String>{

    @Override
    protected String doInBackground(String... params) {
        try {
            json = search("lilwayne");
            return json.getString(params[0]);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        fetchText.setText(result);
    }

}
}
public类MainActivity扩展活动实现OnClickListener{
文本视图获取文本;
EditText httpEntryBox,jsonEntryBox;
按钮搜索按钮http,搜索按钮json;
HTTP_Fetcher HTTP_fetch;
HttpClient;
最终静态字符串URL=“itunes.apple.com/search?term=”;
JSONObject json;
输入方法管理器imm;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fetchText=(TextView)findViewById(R.id.fetchText);
client=新的DefaultHttpClient();
新建Read().execute(“artistName”);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共JSONObject搜索(String searchItem)抛出ClientProtocolException、IOException、JSONException、URISyntaxException{
StringBuilder url=新的StringBuilder(url);
url.append(searchItem);
字符串已完成\u url=url.toString();
HttpGet=新的HttpGet(完成的url);
HttpResponse r=client.execute(get);
int status=r.getStatusLine().getStatusCode();
如果(状态==200){
HttpEntity e=r.getEntity();
字符串数据=EntityUtils.toString(e);
JSONArray数组=新的JSONArray(数据);
返回array.getJSONObject(0);
}否则{
Log.e(“搜索”、“获取错误”);
返回null;
}
}
公共类读取扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
json=搜索(“lilwayne”);
返回json.getString(参数[0]);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(JSONException e){
e、 printStackTrace();
}捕获(URISyntaxException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
fetchText.setText(结果);
}
}
}

我认为您缺少http方案,因此,请不要:

final static String URL = "itunes.apple.com/search?term=";
付诸表决:

编辑

即使这样做可行,JSON解析也会因为这一行而失败:
JSONArray array=newJSONARRAY(数据)
-这假设响应是一个数组,但它是一个JSONObject,包含两个条目:
ResultCount
results
。您需要将其设置为
JSONObject
JSONObject obj=新的JSONObject(数据)。互联网上充斥着
android json解析
教程。这是一个。

非常感谢你,古纳!
final static String URL = "http://itunes.apple.com/search?term=";