2012-03-06 6 views
0

JSONとHTTPクライアントを使用してデータベースのテーブルからデータを取得しようとしています。私が持っているコードは動作しているようですが、何も出力していませんが、クエリの中で何かを意図的に変更すると、エラートーストの出力が出ます。問題は、JSON出力をビュー画面に表示する方法を調べることです。ここでSQLクエリを取得するときにアンドロイドでJSONを使用してビューに出力する方法

は、完全なHTTPコードです:ここで

public void LoadRemote() 
{ 

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    //http post 
    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://deucalion0.co.uk/getscores.php"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     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); 
     sb = new StringBuilder(); 
     sb.append(reader.readLine() + "\n"); 

     String line="0"; 
     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()); 
     } 
//paring data 
int score; 
String username; 
try{ 
     jArray = new JSONArray(result); 
     JSONObject json_data=null; 
     for(int i=0;i<jArray.length();i++){ 
       json_data = jArray.getJSONObject(i); 
       score=json_data.getInt("score"); 
       username=json_data.getString("username"); 
      } 
     } 
     catch(JSONException e1){ 
      Toast.makeText(getBaseContext(), "No City Found" ,Toast.LENGTH_LONG).show(); 
     } catch (ParseException e1) { 
      e1.printStackTrace(); 
    } 
} 

は私のSQLクエリです:

$sql=mysql_query("select score, username from highscores "); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 

あなたは、私がこの問題について何かアドバイスをいただければ幸いこの作業here

を見ることができます。

ありがとうございました。

public class Viewscores extends Activity{ 

Button scores; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewscores); 

    scores = (Button) findViewById(R.id.bViewscores); 

    scores.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v) { 

      LoadRemote(); 
     } 

    }); 

} 


    public void LoadRemote() 
    { 

    String result = ""; 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    InputStream is = null; 
    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new    HttpPost("http://deucalion0.co.uk/getscores.php"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     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()); 
     } 

BufferedReader myReader = new BufferedReader(new InputStreamReader(is)); 



    } 


    } 

答えて

1

OK ...ここにコード全体が...ここ

public class Viewscores extends Activity{ 

Button scores; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.viewscores); 

scores = (Button) findViewById(R.id.bViewscores); 

scores.setOnClickListener(new View.OnClickListener(){ 

    public void onClick(View v) { 

     Intent i=new Intent(this,lst.class); 
startActivity(i); 
    } 

}); 

} 

はこの1つは確かに働く "LST" クラス

public class lst extends ListActivity{ 
JSONArray jArray; 
String result = null; 
InputStream is = null; 
StringBuilder sb=null; 
String s[]; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

try{ 
URL u=new URL("http://deucalion0.co.uk/getscores.php"); 
URLConnection tc=u.openConnection(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(tc.getInputStream())); 


String line; 

while ((line = reader.readLine()) != null) { 
jArray =new JSONArray(line); 
s=new String[jArray.length()]; 
for(int m=0;m<jArray.length();m++){ 
    JSONObject json_data=(JSONObject)jArray.get(m); 

    s[m]=json_data.getInt("score")+" "+json_data.getString("username"); 
} 
} 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, s); 
setListAdapter(adapter); 
} 

catch(JSONException e1){ 
} catch (ParseException e1) { 
e1.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
}     | 
}          --- 

です...これを試してみてください。 ..

+0

あなたの問題が解決すれば...何か答えを受け入れる..] – 5hssba

+0

こんにちはRaju私はまだあなたの提案に取り組んでいます、私はあなたの答えを受け入れることを心配しないでください、私はいつも答えを受け入れる。私はまだそれを受け入れていないので、まだそれを働かせるのが難しいので、私はあなたがすでに私に多くを提供しているので、あなたにもっと多くの援助を求めることではありませんでした。なぜ私はコードを理解していると思いますが、私は今日もそれに取り組んでいきます。多くの感謝! – deucalion0

+1

ok ok ...もし何かエラーが出たら私に知らせてください...私ももっと学び、助けてくれるように。=] – 5hssba

1

私は間違っているかもしれませんが、あなたがこのようなラッパーオブジェクトを作成した場合、それが簡単ではありません:それは今あるよう

私は合併症を再び開始している、ここでのアクティビティクラスは次のとおりです。

public class Response { 
     public int score; 
     public String username; 
    } 

そして、それはgsonでJSONをdeserialzeするのは簡単です:

ArrayList<Response> responses = new ArrayList<Response>(); 
Gson gson = new Gson(); 
Type collectionType = new TypeToken<List<Response>>(){}.getType(); 
responses = gson.fromJson(response, collectionType); 

応答HTTPリクエストからのStringです。 gsonの詳細については、

1

あなたが使用しているビューについては言及していないので、「私のビュー画面にJSON出力を取得する」という意味を正確に理解できませんでした。これについてのリストビュー...これは私ができると思うことです。

try{ 
    jArray = new JSONArray(result); 
    int k=jArray.length(); 
    String s[]=new String[k]; 
    for(int u=0;u<k;u++){ 
     json_data = jArray.getJSONObject(i); 
      s[u]=json_data.getInt("score")+" "+json_data.getString("username"); 
     } 
      setContentView(R.layout.fine); 
      ListView lv = (ListView)findViewById(R.id.list); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       R.layout.list,R.id.textView1,s); 
      lv.setAdapter(adapter); 
+0

コードサンプルのおかげで、私は過去3時間を実装しようとしましたが、エラーは何も得られません。画面とボタンしかありませんこのアクティビティの画面。私がボタンを押すと、ユーザー名とスコアが画面に表示されますが、私がどのようにアクティビティクラスを投稿すれば、私を助けてくれるのか分かりません。 ありがとうございました。 – deucalion0

+1

1.私はあなたが得るエラーを知っています..あなたのlogcatをペーストしてください。 2.yes、あなたのアクティビティクラスも貼り付けてください。私はあなたを助けることができるように.. =] – 5hssba

+0

ありがとう、ありがとう。私の元のコードに何を追加したのか見ることで、それは私が考える結果を出力する何らかの方法でしたか?私はあまりにも多くのことを気にしていましたし、Eclipseで問題が発生しました。私はもう一度やり直さなければなりませんでした。私は自分のアクティビティクラスをペーストします。 JSONがクエリを出力する最良の方法であるかどうかわかりません。 新しいコードを元の投稿に掲載します。 ご理解いただきありがとうございます。 – deucalion0

関連する問題