2012-05-02 14 views
0

ローカルデータベースにアクセスして単一の値を返す次のコードがあります(テスト目的のために、値は 'lasagna'です。リスト内の項目。 アプリケーションがクラッシュした活動がアクセスされる。AndroidアプリケーションがMySQLデータベースに接続できません

イム本当に立ち往生し、任意のヘルプは素晴らしいことだ。

public class RecipeMethodActivity extends ListActivity { 

Intent myIntent; 
String value; 
TextView editvalue; 
TextView buttonPressed; 
Intent intent; 
String result = null; 
InputStream is = null; 
StringBuilder sb=null; 
String result2 = null; 


final Recipe[] mRecipesArray = { new Recipe("Lasagna", new String[]{"1 Brown lean ground beef in skillet until lightly browned and cooked through. Put a few layers of paper towels in large bowl. With slotted spoon, remove browned beef from skillet draining off excess beef fat and put on top of blotting towels. After all the browned beef has been removed from the skillet, drain off and dispose of excess beef fat. Wipe skillet clean with paper towel. (If your ground beef is sufficiently lean, there will not be any excess fat to drain.)Add diced green pepper and onion to skillet. Brown for a few minutes on medium high heat. Add the garlic and cook for 30 seconds more. Add browned beef back to the skillet, lower the heat to low and continue to cook for 5 more minutes stirring frequently.", 
               "2 Transfer browned beef, green pepper and onions to 3 Qt. pot. Add tomato sauce, tomato paste. Open stewed tomatoes and dice, then add to 3 Qt. pot. Add oregano, parsley, Italian Spice Mix to taste, probably 2 teaspoons of each. Add a pinch of garlic powder and a pinch of garlic salt, to taste. Add a dash of white wine vinegar. Add sugar a tablespoon at a time, until desired level of sweetness, no more than 1/4 cup of sugar. Note that it is hard to follow a pure recipe when it comes to pasta sauce. One Italian spice mix is not like the other, nor is one can of tomato sauce not like the other. So you really do need to taste the sauce as you are adding the spices, sugar and vinegar. Stir and allow sauce to simmer 15-45 minutes to thicken (do not scorch bottom, stir frequently). Remove from heat.", 
               "3 Cook lasagna noodles in 6 Qt. Pot per cooking directions (al dente). (Note noodles may be cooked in advance.) Stir often to prevent from sticking and be sure that water remains at a boil during the entire cooking to prevent noodles from sticking. I add Tbsp of salt to the water so the noodles are more flavorful. Drain in colander and place in a cool water filled pan to keep from drying out and sticking together.", 
               "4 In dry lasagna pan, ladle one cup of sauce and spread along the bottom of the pan. Apply a layer noodles 3 length wise (edges overlapping). Ladle in sauce sparingly into center trough of 3 noodles. Apply a layer of mozzarella cheese slices on top of lasagna sauce. Place ricotta cheese dollops every 2 inches in center of noodles on top of mozzarella cheese slices, sprinkle grated parmesan cheese in thin even layer on top of ricotta cheese. Apply second layer of noodles, topping again with sauce and cheese. Finish with another layer of noodles. If you have extra sauce and cheese you can spread that over the top. Tent lasagna pan with aluminum foil (not touching noodles or sauce). Bake at 375°F for 45 minutes. Allow to cool before serving."}), 
            new Recipe(result, new String[]{"GlaDOS' wit","Is a lie"}), 
            new Recipe("EarthDestruction", new String[]{"Asteroid", "Kinetic energy"})}; 

public class Recipe{ 
    public String name; 
    public String[] steps; 

    Recipe(String name, String[] steps){ 
     this.name = name; 
     this.steps = steps; 
    } 
} 

public ArrayList<String> FetchRecipesRawArray(Recipe[] recipes){ 
    ArrayList<String> ret = new ArrayList<String>(); 
    for(int i=0;i<recipes.length;i++){ 
     ret.add(recipes[i].name); 
    } 
    return ret; 
} 

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

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

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

    try{ 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost("http://127.0.0.1/index.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(); 
        Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show(); 
       }catch(Exception e){ 
        Log.e("log_tag", "Error converting result "+e.toString()); 
       } 
       //paring data 
       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_name=json_data.getString("recipename"); 
        } 
       }catch(JSONException e1){ 
        Toast.makeText(getBaseContext(), "No Food Found", Toast.LENGTH_LONG).show(); 
       }catch (ParseException e1){ 
        e1.printStackTrace(); 
       } 



} 

protected void onListItemClick(ListView l, View v, int position, long id){ 
    Intent intent = new Intent(this, MethodActivity.class); 
    intent.putExtra(MethodActivity.EXTRA_RECIPEARRAY, mRecipesArray[position].steps); 
    startActivity(intent); 

} 
} 

私はたとえそこにデータを取得していないのエラーを提示していますデータベース内のデータです。問題は何か?

私のPHPは次のとおりです。

<?php 
mysql_connect("localhost","root","michael2020"); 
mysql_select_db("finalyearproject"); 

$q=mysql_query("SELECT recipename FROM recipes WHERE  recipename>'".$_REQUEST['value']."'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 

print(json_encode($output)); 

mysql_close(); 
?> 
+0

私はアンドロイドが理解しているか、ホストの127.0.0.1にルーティングしているかどうかはわかりません。 AFAIKは、127.0.0.1を指すと、デバイス自体を指します。 – ariefbayu

+0

ええ、これは10.0.2.2に変更されました。今は実行されますが、値を返す必要があるときは何もありません。私は私のPHPが正しく機能していないと信じています。それがどういうふうに分かりますか? –

+0

'それはどういうことでしょう?'ブラウザでURLを実行し、その結果を確認しますか?ログ(エラーとアクセスログの両方)を確認します。 – ariefbayu

答えて

1

ただ、この1を試してみてください。

$q=mysql_query("SELECT recipename as recipe FROM recipes WHERE  recipename>'".$_REQUEST['value']."'"); 

while($e=mysql_fetch_assoc($q)) 
    $output=$e['recipe']; 

print(json_encode($output)); 
関連する問題