簡體   English   中英

解析時android中的Json解析錯誤

[英]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

試試:10.0.2.2而不是localhost。 (也許您還應該包括端口?,例如10.0.2.2:80或您具有的設置)

編輯:

對於沒有GPU問題的仿真器,請參見: stackoverflow鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM