2012-01-07 44 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