java-从目标主机获取JSON对象.错误:目标主机不能为空
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-从目标主机获取JSON对象.错误:目标主机不能为空,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4254字,纯文字阅读大概需要7分钟。
内容图文
我正在尝试弄清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);
}
}
}
解决方法:
我认为您缺少http方案,因此:
final static String URL = "itunes.apple.com/search?term=";
放:
final static String URL = "http://itunes.apple.com/search?term=";
编辑
即使这行得通,由于以下原因,JSON的解析也会失败:JSONArray array = new JSONArray(data); -假设响应是一个数组,但是它是一个JSONObject,其中包含两个条目:resultsCount和results.您需要将其设为JSONObject:JSONObject obj = new JSONObject(data);.互联网上到处都是android json解析教程.这是relevant article.
内容总结
以上是互联网集市为您收集整理的java-从目标主机获取JSON对象.错误:目标主机不能为空全部内容,希望文章能够帮你解决java-从目标主机获取JSON对象.错误:目标主机不能为空所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。