1

オンライン辞書のAndroidアプリを作成しています。JSONを使用して、ユーザーが入力した単語の定義を要求しています。この入力は、検索ボタンがクリックされるたびに変数「テキスト」に入力されます。次に、入力された単語がAPIリクエストURLに追加され、定義が返されます。これは、下部のメソッドOnPost Execute()の変数「result」に格納されます。次に、TextViewをこの文字列に設定する必要があります。

したがって、ユーザー入力は常に変更され、毎回要求されるため、JSONおよびHTTPrequestコード全体をonClickLIstener内に配置しますが、「public JSONObject lastTweet(Stringword)」の後に「throwsClientProtocolException」でエラーが発生すると、エラーは「構文エラー」になります。トークンについては、これらのトークンを削除してください」私はEnclipseIndigoを使用しています。

これが私のコードです:

    public class Dictionary extends Activity {
    String finalresult;
    HttpClient client = new DefaultHttpClient();
    TextView ansa;
    JSONObject json;
    Button Search;
    EditText input; 
    String text;
    final static String URL = "http://api.wordnik.com/v4/word.json/";        
    final static String URL2 = "/definitions?api_key=<MY API KEY>"; 
    String fresult;
    Dictionary dic = new Dictionary();

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dictionary);
        ansa = (TextView) findViewById(R.id.ansa);
        input = (EditText) findViewById(R.id.input);
        Search = (Button) findViewById(R.id.search);

     Search.setOnClickListener(new View.OnClickListener() {


            public void onClick(View v) {
                // TODO Auto-generated method stub
                text = input.getText().toString();

                public JSONObject lastTweet(String word) 
                        throws ClientProtocolException, IOException, JSONException{

                    new Read().execute("text");   
                    StringBuffer strBuff = new StringBuffer();
                     strBuff.append(URL);
                     strBuff.append(word);
                     strBuff.append(URL2);


                    HttpGet get = new HttpGet(strBuff.toString());
                    HttpResponse r = client.execute(get);
                    int status = r.getStatusLine().getStatusCode();
                    if (status == 200){
                        HttpEntity e = r.getEntity();
                        String data = EntityUtils.toString(e);
                        JSONArray timeline = new JSONArray(data);
                        JSONObject last = timeline.getJSONObject(0);
                        return last;

                    }else{
                        Toast.makeText(Dictionary.this, "error", Toast.LENGTH_LONG);
                        return null;

                    }

                }


                class Read extends AsyncTask<String, Integer, String>{

                    @Override
                    public String doInBackground(String... params) {
                        // TODO Auto-generated method stub
                        try {
                            json = lastTweet(text);
                            return json.getString(params[0]);
                        } catch (ClientProtocolException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        return null;
                    }

                    @Override
                    protected void onPostExecute(String result) {
                        fresult = result;
                        // TODO Auto-generated method stub
                                    }
                }
                    ansa.setText(fresult);
                }

        });

     }  

    public JSONObject lastTweet(String word) 
            throws ClientProtocolException, IOException, JSONException{

        new Read().execute("text");   
        StringBuffer strBuff = new StringBuffer();
         strBuff.append(URL);
         strBuff.append(word);
         strBuff.append(URL2);


        HttpGet get = new HttpGet(strBuff.toString());
        HttpResponse r = client.execute(get);
        int status = r.getStatusLine().getStatusCode();
        if (status == 200){
            HttpEntity e = r.getEntity();
            String data = EntityUtils.toString(e);
            JSONArray timeline = new JSONArray(data);
            JSONObject last = timeline.getJSONObject(0);
            return last;

        }else{
            Toast.makeText(Dictionary.this, "error", Toast.LENGTH_LONG);
            return null;

        }

    }


    class Read extends AsyncTask<String, Integer, String>{

        @Override
        public String doInBackground(String... params) {
            // TODO Auto-generated method stub
            try {
                json = lastTweet(text);
                return json.getString(params[0]);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            fresult = result;
            // TODO Auto-generated method stub
        }
    }

}

助言がありますか?

4

1 に答える 1

1

リクエストコードを別のクラスに移動してみましたか?

于 2012-07-28T14:52:16.783 に答える