0

最後にクリックされたリストビューアイテムデータを保持するcurrentという変数があります。このデータのIDは、類似している映画についてデータベースに再度クエリを実行するために使用されます。

current = id = 17985、title =マトリックス、year = 1999で、必要なのは実際のid番号だけであるという問題。文字列の正しい場所のみを使用するために部分文字列を使用しようとしました。IDが正確に5桁の長さであるため、これはマトリックスに対して機能しますが、IDの桁数が多い/少ないムービーをクリックしようとすると、もちろんトリップします。

文字列ID=current.substring(4,9).trim()。toString(); すべての映画で機能するわけではありません。

ここにいくつかのコードがあります:

//検索メソッド:これが必要なのは、これが最初に使用され、変数currentが設定されているメソッドだからです。これは、データを取得するために3行(id、title、year)を使用する唯一の方法でもあります。

 protected void search() {
        data = new ArrayList<Map<String, String>>();
        list = new ArrayList<String>();
        EditText searchstring = (EditText) findViewById(R.id.searchstring);
        String query = searchstring.getText().toString().replace(' ', '+');
        String text;

        text = searchquery(query);
        try {
            JSONObject res = new JSONObject(text);

            JSONArray jsonArray = res.getJSONArray("movies");

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

                JSONObject jsonObject = jsonArray.getJSONObject(i);
                item = new HashMap<String, String>(2);
                item.put("id",jsonObject.getString("id"));
                item.put("title",jsonObject.getString("title"));
                item.put("year", jsonObject.getString("year"));
                data.add(item);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }                   

        aa = new SimpleAdapter(SearchTab.this, data,
                R.layout.mylistview,
                new String[] {"title", "year"},
                new int[] {R.id.text1,
                R.id.text2});
        ListView lv = (ListView) findViewById(R.id.listView1);
        lv.setAdapter(aa);
        lv.setDividerHeight(5); 

        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {

                Map<String, String> s = data.get((int) id);
                current = s.toString();
            }});
    }

//同様の方法:これは、「現在の」文字列からフェッチされたデータからリストを作成しようとします。ご覧のとおり、4,9を使用して正しい数値のみを取得しようとしていますが、他の場合は失敗します。最善の方法は、私ができないように見えるIDを取得できるようにすることだけです。乾杯は、システムのアウトプリントのように、何がフェッチされているかを確認するためだけのものです。

 protected void similar() {
        data = new ArrayList<Map<String, String>>();
        list = new ArrayList<String>();
        String id = current.substring(4,9).trim().toString();
        Toast.makeText(getApplicationContext(), id, Toast.LENGTH_SHORT).show();
        String text;

        text = similarquery(id);
        try {
            JSONObject res = new JSONObject(text);

            JSONArray jsonArray = res.getJSONArray("movies");

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

                JSONObject jsonObject = jsonArray.getJSONObject(i);
                item = new HashMap<String, String>(2);
                item.put("title",jsonObject.getString("title"));
                item.put("year", jsonObject.getString("year"));
                data.add(item);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }                   

        aa = new SimpleAdapter(SearchTab.this, data,
                R.layout.mylistview2,
                new String[] {"title", "year"},
                new int[] {R.id.text1,
                R.id.text2});
        ListView lv = (ListView) findViewById(R.id.listView1);
        lv.setAdapter(aa);
        lv.setDividerHeight(5); 

    }
4

2 に答える 2

1

サブストリングを介してそれを解決したい場合は、事前定義されたを使用しないでください.substring(4,9)。次のようなものを使用します。

String item = "id=17985, title=the matrix, year=1999";
String id = item.substring(item.indexOf("id=") + 3, item.indexOf(" ", item.indexOf("id=") + 3) - 1);
System.out.println("Your ID is: " + id);
// Works also for "test=asdf, id=17985, title=the matrix, year=1999"

"id="と次の""(スペース)の間の文字列を取得します。

于 2012-10-23T19:36:00.423 に答える
1

使用するcurrent.split(",")[0].split("=")[1]

編集-もちろん、idは常にコンマ区切りリストの最初であり、常に「=」で区切られた名前と値のペアになると想定します

于 2012-10-23T19:38:35.147 に答える