2012-01-07 20 views
0

これは、リモートmySQLデータベースから作成されたListActivityを作成する私の最初の試みです。私はローカルのSQLiteデータベースからデータを取得している間、この作業はうまくいきました。代わりにリモートデータベースからデータを取得するためにクラスを修正する必要があったので、チュートリアルやドキュメントに従うことでクラスを調整しようとしました。私の見解の複雑さと「getExtras」の使用のために、私はこれを理解することができません。ListActivityの空白画面

私の質問は次のとおりです:改訂版では、LogCatでエラーなしで空リストが返されます。私のクラスには何が見えますか?推薦?

public class QueryDisplayList extends ListActivity { 

    private static final String PHP_KEY = "PHP_KEY"; 
    private static final String QUERY_ORDER = "QUERY_ORDER"; 

    JSONArray jArray; 
    String result = null; 
    InputStream is = null; 
    StringBuilder sb = null; 

    // private Object tvLabel = null; 

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

     Bundle extras = getIntent().getExtras(); 
     setContentView(R.layout.list_view2); 

     /** 
     * Get the query string from last activity and pass it to this 
     * activity----------------------------------------------------- 
     */ 
     // String p = null; 
     // if (extras != null) { 
     // p = extras.getString(PHP_KEY); 
     // } 
     loadQuery(); 
    } 

    void loadQuery() { 

     new Thread(new Runnable() { 

      public void run() { 

       String qO = getIntent().getStringExtra("QUERY_ORDER"); 
       String php = getIntent().getStringExtra("PHP_KEY"); 

       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       // http post 
       try { 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost(
          "http://10.0.2.2/App/php/" + php + qO + ".php"); 

        Log.e("log_tag", "Fetched " + php + qO + ".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()); 
       } 

      } 
     }).start(); 

     setListAdapter(new QueryAdapter(this, result)); 
    } 

    /** 
    * The Query Adaptor -------------------------------------------- 
    */ 

    private class QueryAdapter extends ArrayAdapter<String> { 

     private Activity context; 

     public QueryAdapter(Activity context, String result) { 
      super(context, R.layout.list_view2); 
      this.context = context; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      View rowView = inflater.inflate(R.layout.list_item, null, true); 

      try { 
       jArray = new JSONArray(result); 
       JSONObject json_data = null; 

       for (int i = 0; i < jArray.length(); i++) { 

        json_data = jArray.getJSONObject(i); 

        final String tvLabel = json_data.getString("label"); 
        TextView labelTxt = (TextView) convertView 
          .findViewById(R.id.label); 
        if (labelTxt != null) { 
         labelTxt.setText("(" + tvLabel + ")"); 
        } 

        final String tvTitle = json_data.getString("title"); 
        TextView titleTxt = (TextView) convertView 
          .findViewById(R.id.listTitle); 
        if (titleTxt != null) { 
         titleTxt.setText(tvTitle); 
        } 

        String tvDescription = json_data.getString("description"); 
        TextView descriptionTxt = (TextView) convertView 
          .findViewById(R.id.caption); 
        if (descriptionTxt != null) { 
         descriptionTxt.setText(tvDescription); 
        } 

        String tvDate = json_data.getString("date"); 
        TextView dateTxt = (TextView) convertView 
          .findViewById(R.id.dateAdded); 
        if (dateTxt != null) { 
         dateTxt.setText(tvDate); 
        } 

        String tvGoto = json_data.getString("gotoURL"); 
        TextView gotoTxt = (TextView) convertView 
          .findViewById(R.id.dummy); 
        if (gotoTxt != null) { 
         gotoTxt.setText(tvGoto); 
        } 

        gotoTxt.setVisibility(View.GONE); 
        convertView.setTag(gotoTxt); 

        final String ni = json_data.getString("intent"); 

        final ListView lv = getListView(); 
        lv.setEnabled(true); 
        lv.setClickable(true); 

        /** 
        * Click Listeners -------------------------------- 
        */ 
        lv.setOnItemClickListener(new OnItemClickListener() { 

         @Override 
         public void onItemClick(AdapterView<?> arg0, View v, 
           int arg2, long arg3) { 

          // -- Set the domain name in the strings.xml file 
          // once 
          // the 
          // DNS is established for the website. 
          String mDomain = getResources().getString(
            R.string.domain); 

          String url = ""; 
          url = mDomain + (String) v.getTag(); 

          String intent = ni; 
          Class<?> nIntent = null; 
          try { 
           nIntent = Class 
             .forName("com.andaerosystems.andaero.utili." 
               + intent); 
          } catch (ClassNotFoundException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 

          Intent i = new Intent(QueryDisplayList.this, 
            nIntent); 
          i.putExtra("PHP_KEY", tvLabel); 
          i.putExtra("KEY_URL", url); 
          i.putExtra("KEY_SUBTITLE", tvTitle); 
          i.putExtra("KEY_LABEL", tvLabel); 
          i.putExtra("KEY_INTENT", intent); 
          i.putExtra("QUERY_ORDER", "ASC"); 
          i.putExtra("KEY_YPOS", "0.0"); 
          QueryDisplayList.this.startActivity(i); 

          Log.e("tag", url); 
         } 
        }); 
       } 
      } catch (JSONException e1) { 
       Toast.makeText(getBaseContext(), "No label Found", 
         Toast.LENGTH_LONG).show(); 
      } catch (ParseException e1) { 
       e1.printStackTrace(); 
      } 
      return rowView; 
     } 
    } 
} 

答えて

0

私はあなたのコードを見てみました。これを試して。

void loadQuery() { 

     new Thread(new Runnable() { 

      public void run() { 

       String qO = getIntent().getStringExtra("QUERY_ORDER"); 
       String php = getIntent().getStringExtra("PHP_KEY"); 

       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       // http post 
       try { 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost(
          "http://10.0.2.2/App/php/" + php + qO + ".php"); 

        Log.e("log_tag", "Fetched " + php + qO + ".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(); 
        YourActivity.this.runOnUiThread(new Runnable(){ 

      @Override 
      public void run() { 
       YourActivity.this.setListAdapter(new QueryAdapter(this, result)); 
      }}); 

       } catch (Exception e) { 
        Log.e("log_tag", "Error converting result " + e.toString()); 
       } 


      } 
     }).start(); 


    } 
+0

Thnx!それは一歩前進しましたが、私は致命的な例外を表示しています:メイン java.lang.ClassCastException:com.andaerosystems.andaero.utili.QueryDisplayList $ 1 $ 1はandroid.content.Contextにキャストすることはできません com.andaerosystems.andaero。 utili.QueryDisplayList $ QueryAdapter'ここから何をすべきか分かりません..?それ以上の助け? Thnx! @Nikola Despotoski – CelticParser

+0

あなたはいくつかの不良鋳造をしています...例外がスローされる行を確認してください –

0

これを段階的にデバッグし、結果の変数の値をチェックアウトしましたか?

例:jsonファイルを解析する際に、誤植やgetString()のエラーが原因でプロセスが停止します。

0

まず、HttpPostから受け取った新しい結果を(応答を得る前にアダプタが作成されているので)あなたのアダプタに渡すことはありません。

また、getViewは、このように使用されることはありません。それは、リスト内に単一のアイテムを作成することです。あなたがしていることは、すべてのアイテムを作成することです。あなたがすべきことは、データを解析し、解析されたデータを含むリストをアダプターに追加することです。

この例を見てください:http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications

関連する問題