2011-07-30 5 views
0

私のJSON解析アプリケーションのコードは次のとおりです。エミュレータで実行するとすぐに強制終了されます。私はAndroidプログラミングの初心者です。私は独学ですので、私と一緒にご負担ください。ありがとう!"no data"というJSON解析アプリケーションですか?

JSONfunctions.java:

package com.pxr.tutorial.json; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.HashMap; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.util.Log; 

public class JSONfunctions { 

public static JSONObject getJSONfromURL(String url){ 
    InputStream is = null; 
    String result = ""; 
    JSONObject jArray = null; 

    //http post 
    try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

    }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
    } 

    //convert response to string 
    try{ 
      BufferedReader reader = new BufferedReader(new    
       InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
      } 
      is.close(); 
      result=sb.toString(); 
    }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
    } 

    try{ 

     jArray = new JSONObject(result);    
    }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 

    return jArray; 
} 
} 

Main.java:

package com.pxr.tutorial.json; 

import java.util.ArrayList; 
import java.util.HashMap; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 

import com.pxr.tutorial.xmltest.R; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

public class Main extends ListActivity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listplaceholder); 

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, 
    String>>(); 


    JSONObject json = JSONfunctions.getJSONfromURL 
("http://www.tastekid.com/ask/ws?q=mosdef&f=musifin2125&k=mjjlnzkyzwuz&format=JSON");     
    try{ 

     JSONArray similar = json.getJSONArray("similar"); 

     for(int i=0;i<similar.length();i++){       
      HashMap<String, String> map = new HashMap<String, String>();  
      JSONObject e = similar.getJSONObject(i); 

      map.put("id", String.valueOf(i)); 
      map.put("name", "Name:" + e.getString("name")); 
      map.put("type", "Type: " + e.getString("type")); 
      mylist.add(map);    
     }  
    }catch(JSONException e)  { 
     Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
        new String[] { "name", "type" }, 
        new int[] { R.id.item_title, R.id.item_subtitle }); 

    setListAdapter(adapter); 

    final ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) {     
      @SuppressWarnings("unchecked") 
      HashMap<String, String> o = (HashMap<String, String>) 
lv.getItemAtPosition(position);     
      Toast.makeText(Main.this, "ID '" + o.get("id") + "' was clicked.", 
Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
} 

EDIT - 固定未処理の例外が、私はURLを解析しようとすると、今では "データなし" と言いません。

もう一度おねがいします!ここで

+0

logcatには何が表示されますか? –

+0

私はlogcatを使用しようとしましたが、それを整理する方法がわからないので、たくさんのデータがあります。すべてのデータが欲しいですか? – Slicekick

+1

赤色のもの(例外スタックダンプ)。 –

答えて

0

はあなたの過ちである:JSONを解析するには

JSONArray similar = json.getJSONArray("similar");

  1. あなたはそれが大文字と小文字を区別だことに注意しなければならない、私はあなたのJSONオブジェクトがSimiliarであることがわかりますが、あなたはsimiliarとしてそれを取得しよう。
  2. SimiliarはJSONオブジェクトであるが、ここでJSONArray

は、あなたのコードの修正で、私はあなたにInfoSimiliar内部のオブジェクトを取得するための修正を与えるようあなたはそれを取得しよう:

 JSONObject earthquakes = json.getJSONObject("Similar"); 
     JSONArray info = earthquakes.getJSONArray("Info"); 

     for (int i = 0; i < info.length(); i++) { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      JSONObject e = info.getJSONObject(i); 

      map.put("id", String.valueOf(i)); 
      map.put("name", "Name:" + e.getString("Name")); 
      map.put("type", "Type: " + e.getString("Type")); 
      mylist.add(map); 
     } 

上記のコードを使用してJSONObject json = JSONFun.getJSONfromURL("http://www.tastekid.com/ask/ws? q=mosdef&f=musifin2125&k=mjjlnzkyzwuz&format=JSON"); のコードブロックをtryに置き換えてください。

+0

JSONlintでチェックして検証しました。私のコードでparseResponse()セクションはどこにありますか?私はどこにでも見ることができません。 – Slicekick

+0

え?あなたがコードのURLを変更したように見えます。もしあなたがそれほど大丈夫でなければ、私はいくつかの間違いを見つけました。私は答えを編集します。 – ayublin

+0

@ Slicekick私は自分の答えを編集しました、あなたは今それを確認することができます。 – ayublin

0

インターネットを使用できるマニフェストファイルにpermissionタグを追加しました

+0

ええ、私はすでにやりました。 – Slicekick