2012-01-07 25 views
0

這是我第一次嘗試創建從遠程mySQL數據庫填充的ListActivity。從本地SQLite數據庫獲取數據時,我的工作正常。我需要修改我的課程,以便從遠程數據庫獲取數據,所以我試圖通過以下教程和文檔來調整我的課程來完成此任務。由於我的觀點和使用'getExtras'的複雜性,我無法弄清楚這一點。ListActivity上的空白屏幕從mySQL填充

我的問題是:現在通過修訂,我得到一個空白列表,在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!這是一個進步,但現在我得到了致命的例外:main 'java.lang.ClassCastException:com.andaerosystems.andaero.utili.QueryDisplayList $ 1 $ 1無法在com.andaerosystems.andaero上強制轉換爲android.content.Context 。 utili.QueryDisplayList $ QueryAdapter'不知道該從這裏做什麼..?還有什麼幫助?日Thnx! @Nikola Despotoski – CelticParser 2012-01-07 01:51:04

+0

你正在進行一些錯誤的轉換......檢查引發異常的行 – 2012-01-07 02:16:14

0

你是一步步調試它並檢查出變量的結果值嗎?

一個例子:解析json文件時,輸入錯誤或getString()中的錯誤會停止進程。

0

首先,您不會將從HttpPost收到的新結果傳遞到您的適配器(因爲適配器是在獲得響應之前創建的)。

此外,getView不意味着這樣使用。它所做的是在列表中創建單個項目。你在做什麼是創建所有的項目。你應該做的就是解析數據並將解析後的數據添加到適配器中。

看一看這個例子:http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications