2012-02-19 7 views
-1

MySqlサーバーに接続するPHPファイルからコンテンツを取得するアプリケーションをビルドします。それは4.0までのすべてのデバイス(フィードバックに基づいて)に作用します 私のアプリICSを実行するとき、それは解析エラーを得るか、リストされた項目を表示しません。どうしてこれなの? これは私がPHPファイルを使用して、私のDBからコンテンツを取得するコードです:ICS Eclipse - PHPから情報を入手

package com.fireplace.software; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.lang.reflect.Type; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

import com.google.gson.*; 
import com.google.gson.reflect.TypeToken; 

public class GetContentFromDBActivity extends Activity { 

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

     LoadData(); 
    } 


    void GenData(){ 
     ArrayList<ItemSkel> list = new ArrayList<ItemSkel>(); 
     for(int i = 0; i< 10; ++i) { 
      list.add(new ItemSkel("id " + i, "label " + i, "path " + i, "description " + i, "ptype " + i)); 
     } 

     Gson gson = new Gson(); 
     String json = gson.toJson(list); 

     Toast.makeText(GetContentFromDBActivity.this, json, Toast.LENGTH_LONG).show(); 
    } 

    public void btnLoadData(View v) { 
     LoadData(); 
    } 


    void LoadData(){ 

     //TextView v = (TextView)findViewById(R.id.txtStatusError); 
     try { 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpGet httpGet = new HttpGet("http://www.u2worlds.com/fp/getdata.php"); 
      HttpResponse response = httpClient.execute(httpGet, localContext); 
      String result = ""; 

      BufferedReader reader = new BufferedReader(
       new InputStreamReader(
        response.getEntity().getContent() 
       ) 
      ); 

      String line = null; 
      while ((line = reader.readLine()) != null) 
       result += line; 

      Type type = new TypeToken<ArrayList<ItemSkel>>(){}.getType(); 
      Gson g = new Gson(); 
      final ArrayList<ItemSkel> list = g.fromJson(result, type); 
      ArrayList<String> stringArray = new ArrayList<String>(); 
      for (ItemSkel item : list) 
       stringArray.add("" + item.getLabel()); 

      ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray); 
      ListView lv = (ListView)findViewById(R.id.lwApps); 
      lv.setAdapter(modeAdapter); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // When clicked, show a toast with the TextView text 
        ItemSkel currentItem = list.get(position); 
        Intent i = new Intent(getApplicationContext(), ViewInfoActivity.class); 
        i.putExtra("title", currentItem.getLabel()); 
        i.putExtra("icon", currentItem.getIcon()); 
        i.putExtra("link", currentItem.getPath()); 
        i.putExtra("desc", currentItem.getDescription()); 
        i.putExtra("ptype", currentItem.getPtype()); 
        startActivity(i); 
        } 
      }); 

      //Toast.makeText(GetContentFromDBActivity.this, "No Error", Toast.LENGTH_LONG).show(); 
     } 
     catch (Exception ex) { 
      //v.setText(ex.getMessage()); 
      Toast.makeText(GetContentFromDBActivity.this, "Could not connect!", Toast.LENGTH_LONG).show(); 
     } 
    } 
    public void updateProgress(int currentSize, int totalSize){ 
     //Toast.makeText(this, "Packages: " + Long.toString((currentSize/totalSize)*100)+"% Complete", Toast.LENGTH_SHORT).show(); 
     } 
} 

おかげ

+0

あなたはUIスレッド上でデータをロードするべきではありません... AsyncTaskについて読む...次回は、スタックトレースを追加する必要がありすぎ – Selvin

+0

質問ですユーザーのフィードバックに基づいて、私は作者がこれを再現することができなかったと推測し、そして/またはスタックトレースを持っていないと推測します。 – ottel142

答えて

0

のAndroidは、上記のAPIレベル11(アンドロイド3.0)にNetworkOnMainThreadExceptionを投げるとなります。その名前が示すように、あなたはメインスレッド上でネットワーク接続を開くべきではありません。

この理由は、原理「Designing for Responsiveness」です。サーバーが利用できない場合、またはユーザーが弱い接続状態にある場合、サーバーの応答を待っているため、アプリが遅れます。

この上でいくつかの助けを得るために、あなたがこれを読むことができます:http://saigeethamn.blogspot.com/2010/05/http-connection-using-threads-handlers.html

+0

私はすべてを試しましたが、あなたの中には例やスニペットやコードを変更できますか?ありがとう –

関連する問題