[英]Json parsing error in android while parsing
我正在嘗試從本地主機解析json對象,解析后進入webview(必需的URL對象),但在解析屏幕顯示為空屏幕時遇到了解析問題,我不知道到底有誰能解決這個問題。 預先感謝。
JSON結構
{"example":
[ {
"title":"Android1",
"url":"http://hmkcode.appspot.com/rest/controller/get.json" },
{
"title":"android2",
"url":"http://www.dreamincode.net/forums/topic/327137-json-parsing-with-android-listview/" },]
}
主要活動
public class MainActivity extends Activity {
ListView lv;
JSONArray items;
JSONObject jsonObject;
List<String> titleCollection = new ArrayList<String>();
List<String> urlCollection = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView);
new NetworkOperation().execute();
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
String photoUrl = urlCollection.get(arg2);
Intent webViewIntent = new Intent(MainActivity.this, WebViewActivity.class);
webViewIntent.putExtra("url", photoUrl);
startActivity(webViewIntent);
}
});
}
public void loadContents()
{
ArrayAdapter<String> adapter =new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1,titleCollection);
lv.setAdapter(adapter);
}
public class NetworkOperation extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
JsonParser parser = new JsonParser();
try {
String result = parser.getHttpConnection();
String removedString = result.trim().substring(15, result.trim().length()-1);
JSONObject jsonObject = new JSONObject(removedString);
items = jsonObject.getJSONArray("example");
for (int i = 0; i<items.length(); i++) {
jsonObject = items.getJSONObject(i);
titleCollection.add(jsonObject.getString("title"));
urlCollection.add(jsonObject.getString("url"));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
loadContents();
super.onPostExecute(result);
}
}
}
傑森·帕瑟
public class JsonParser {
BufferedReader in = null;
JSONObject jsonObject=null;
String result="";
public String getHttpConnection() throws ClientProtocolException, IOException {
HttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet("http://localhost/JSON-PHP-jQuery/json_data.php");
HttpResponse response = httpClient.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line="";
String lineSeparator=System.getProperty("line.separator");
while ((line=in.readLine())!=null) {
sb.append(line + lineSeparator);
}
in.close();
result = sb.toString();
try{
jsonObject = new JSONObject(result);
}
catch(Exception e) {
}
return result;
}
}
WebViewActivity
public class WebViewActivity extends Activity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);
webView = (WebView)findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient());
String url=getIntent().getExtras().getString("url");
webView.canGoBack();
webView.loadUrl(url);
webView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View arg0, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
return true;
}
else {
return false;
}
}
});
}
}
日志記錄
04-28 13:56:37.326: E/Trace(2566): error opening trace file: No such file or directory (2)
04-28 13:56:38.174: D/gralloc_vbox86(2566): Emulator without GPU emulation detected.
04-28 13:56:38.254: W/System.err(2566): org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-28 13:56:38.254: W/System.err(2566): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-28 13:56:38.254: W/System.err(2566): at com.example.jsonfeed.JsonParser.getHttpConnection(JsonParser.java:29)
04-28 13:56:38.254: W/System.err(2566): at com.example.jsonfeed.MainActivity$NetworkOperation.doInBackground(MainActivity.java:62)
04-28 13:56:38.254: W/System.err(2566): at com.example.jsonfeed.MainActivity$NetworkOperation.doInBackground(MainActivity.java:1)
04-28 13:56:38.254: W/System.err(2566): at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-28 13:56:38.254: W/System.err(2566): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-28 13:56:38.254: W/System.err(2566): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-28 13:56:38.254: W/System.err(2566): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-28 13:56:38.254: W/System.err(2566): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-28 13:56:38.254: W/System.err(2566): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-28 13:56:38.254: W/System.err(2566): at java.lang.Thread.run(Thread.java:856)
04-28 13:56:38.254: W/System.err(2566): Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused)
04-28 13:56:38.494: W/System.err(2566): at libcore.io.IoBridge.connect(IoBridge.java:114)
04-28 13:56:38.494: W/System.err(2566): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-28 13:56:38.494: W/System.err(2566): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
04-28 13:56:38.494: W/System.err(2566): at java.net.Socket.connect(Socket.java:842)
04-28 13:56:38.498: W/System.err(2566): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
04-28 13:56:38.498: W/System.err(2566): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
04-28 13:56:38.498: W/System.err(2566): ... 16 more
04-28 13:56:38.498: W/System.err(2566): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
04-28 13:56:38.502: W/System.err(2566): at libcore.io.Posix.connect(Native Method)
04-28 13:56:38.502: W/System.err(2566): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
04-28 13:56:38.502: W/System.err(2566): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
04-28 13:56:38.558: W/System.err(2566): at libcore.io.IoBridge.connect(IoBridge.java:112)
04-28 13:56:38.558: W/System.err(2566): ... 21 more
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.