2012-03-04 15 views
1

私はアンドロイドで完全に緑です。そして、私はサーバーからデータを取得し、それをアプリに表示するAppを作成したいと考えています。それを始める方法を教えてもらえますか?私はこのコードを以下に試しました。しかし、食べ物が見つからないという例外があるだけです。Android、サーバーからデータを取得

private EditText outputStream; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    String result = null; 
    InputStream input = null; 
    StringBuilder sbuilder = null; 
    outputStream = (EditText)findViewById(R.id.output); 
    ArrayList <NameValuePair> nameValuePairs = new ArrayList <NameValuePair>(); 

    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("ik.su.lt/~jbarzelis/index.php"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     if (response.getStatusLine().getStatusCode() != 200) { 
      Log.d("MyApp", "Server encountered an error"); 
     } 
     HttpEntity entity = response.getEntity(); 
     input = entity.getContent(); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    try{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(input,"iso-8859-1"),8); 
     sbuilder = new StringBuilder(); 

     String line = null; 

     while((line = reader.readLine()) != null){ 
      sbuilder.append(line + "\n"); 
     } 
     input.close(); 
     result = sbuilder.toString(); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    int fd_id; 
    String fd_name; 
    try{ 
     JSONArray jArray = new JSONArray(result); 
     JSONObject json_data = null; 
     for(int i=0;i<jArray.length();i++){ 
      json_data = jArray.getJSONObject(i); 
      fd_id = json_data.getInt("FOOD_ID"); 
      fd_name = json_data.getString("FOOD_NAME"); 
      outputStream.append(fd_id +" " + fd_name + "\n"); 
     } 


     } 
    catch(JSONException e1){ 
     Toast.makeText(getBaseContext(), "No food found", Toast.LENGTH_LONG).show(); 
    } 
    catch(ParseException e1){ 
     e1.printStackTrace(); 
    } 
} 

PHPコードは正しく表示されます。私はsomethigが上記のコードに間違っていると思います。しようとする

<?php 
    mysql_connect("localhost","********","**********"); 
    mysql_select_db("test"); 
    $sql = mysql_query("select FOOD_NAME as 'Maistas' from FOOD where FOOD_NAME like 'A%'"); 
    while($row = mysql_fetch_assoc($sql)) $output[]=$row; 
    print(json_encode($output)); 
    mysql_close; 
?> 

答えて

3
package com.Valluru; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
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.app.ListActivity; 
import android.content.Intent; 
import android.net.ParseException; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Food extends ListActivity { 
String result = null; 
InputStream is = null; 
StringBuilder sb=null; 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
ListView list1; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    list1 = (ListView) findViewById(android.R.id.list); 

    //http post 
    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://10.0.2.2/food.php"); 
     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 
    String fd_id; 
    String fd_name; 
    try{ 
    JSONArray jArray = new JSONArray(result); 
    JSONObject json_data=null; 

    for(int i=0;i<jArray.length();i++){ 
      json_data = jArray.getJSONObject(i); 
      fd_id =json_data.getString("FOOD_ID"); 

      fd_name = json_data.getString("FOOD_NAME"); 
      nameValuePairs.add(new list<String, String>(fd_id, fd_name)); 
    } 

    list1.setAdapter(new ArrayAdapter<NameValuePair>(getApplicationContext(),android.R.layout.simple_expandable_list_item_1,nameValuePairs)); 

    }catch(JSONException e1){ 
     Toast.makeText(getBaseContext(), "No FOOD Found", Toast.LENGTH_LONG).show(); 
    }catch (ParseException e1){ 
     e1.printStackTrace(); 
    } 

} 
} 

list.java パッケージcom.Valluruです。

<?php 
    mysql_connect("localhost","root"); 
    mysql_select_db("FOOD"); 
    $sql=mysql_query("select * from FOOD where FOOD_NAME like '%'"); 
    while($row=mysql_fetch_assoc($sql)) $output[]=$row; 
    print(json_encode($output)); 
    mysql_close(); 
?> 
+0

food.javaファイルはlocalhostを要求し、サーバ(localhost)は返信します..........ここで私はlocalhostとしてサーバを使用しましたが、そのIPアドレスはhttp://10.0.2.2です –

1

もの:サーバー上

  1. で始まるすべての食品ががありますか?
  2. クエリを実行するのではなく、スクリプトから単純な文字列を返そうとしましたか?
  3. Logのいずれかの呼び出しがLogCatに書き込まれていますか?もしそうなら、それは何を言いますか?
  4. 最初のhttpclient.executeは機能しますか、または例外がトリガーされますか?
  5. result = sbuilder.toString()にブレークポイントを設定し、その値をデバッグします。そこに有効なJSON辞書などがありますか?
  6. 手順4および/または5が失敗し、理由がわからない場合は、Fiddlerを使用してhttpトラフィックを分析してみてください。

上記の手順のいずれかを実行していない場合は、プロジェクトから戻ってこれらのことをまず理解する必要があります。実験を行い、必要に応じて特定の質問を習得してください。

+0

food.php

import org.apache.http.NameValuePair; import android.R.integer; public class list<T,V> implements NameValuePair { T data; V text; public list(T data, V text) { this.data = data; this.text = text; } @Override public String toString(){ return text.toString(); } @Override public String getName() { return (String) data; } @Override public String getValue() { return (String) text; } } 

私はそれをチェックします。そして問題は、JSONではなくHTMLコードを返すということでした。それが問題でした。 – Shien

1

あなたはthoesフィールドを解析できませんでした:

fd_id = json_data.getInt("FOOD_ID"); 
fd_name = json_data.getString("FOOD_NAME") 

これは、サーバーのバグ

関連する問題