0

この URL がMalformedURL例外をスローする理由がわかりません:http%3A%2F%2Fapi.themoviedb.org%2F3%2Fsearch%2Fperson%3Fapi_key%3secret%26query%3Dchristopher_guest

これは、使用する必要がある API に必要な URL です。http://api.themoviedb.org/3/search/person?api_key=secret&query=christopher_guest

この URL を使用して target host must not be nullエラーを取得していたので、コードを以下のように変更しました。ここで何が起こっているのかわかりませんが、アンダースコアを含む URL は Web ブラウザーの外部では検証されず、このような状況を引き起こすと聞いています。

これに関するアイデアはありますか?

これは私がURLを構築する場所です

package com.tot.tipofthetongue;

import android.widget.EditText;

public class getName {
static String nameOne = null;
static String nameTwo = null;

static StringBuilder personURLOne = new StringBuilder();
static StringBuilder personURLTwo = new StringBuilder();

public static String personURL = "http://api.themoviedb.org/3/search/person?api_key=secret&query=";

public static StringBuilder getName1(EditText searchOne){
    nameOne = searchOne.getText().toString();


    nameOne = nameOne.replace(" ", "_");


    personURLOne.append(personURL); 
    personURLOne = personURLOne.append(nameOne);



    return personURLOne;

}

これは、その URL を渡す私の jsonparser です。

public class JSONParser extends AsyncTask<String, Void, JSONObject> {

static InputStream inputStream = null;
static JSONObject jObject = null;
static String jSon = "";
public String myURL;
String host;
HttpRequest request;
protected JSONObject doInBackground(String... url) {
    // TODO Auto-generated method stub

    //Make HTTP Request
    try {
        //defaultHttpClient

        for(int i = 0; i < url.length; i++){
             myURL = url[0];
             myURL = URLEncoder.encode(myURL, "utf-8");
        }
        HttpGet httpGet = new HttpGet(myURL);

                //header
                httpGet.setHeader("Accept", "application/json");


                HttpResponse httpResponse = new DefaultHttpClient().execute(new HttpHost(new URL(myURL).getHost()), request);
                HttpEntity httpEntity = httpResponse.getEntity();
                inputStream = httpEntity.getContent();

            } catch (UnsupportedEncodingException e){
                e.printStackTrace();
            } catch (ClientProtocolException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                StringBuilder stringBuilder = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null){
                    stringBuilder.append(line + "\n");
                }
                Log.d("JSON Contents", stringBuilder.toString());
                inputStream.close();

                jSon = stringBuilder.toString();


            } catch (Exception e){
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }
            //try to parse the string to JSON Object
            try {
                jObject = new JSONObject(jSon);

            } catch (JSONException e){
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }
            //return JSON String
            return jObject;
}

}
4

1 に答える 1

0

フォーム Uri への最終送信の前に、作成した文字列を出力します。そして、これをあなたの質問に添付してください。答えるのははるかに簡単でしょう。

使ってみて

HttpGet(URI uri)
それ以外の
HttpGet(String uri)

理由はとても簡単です。Uri を使用している場合は、すぐに例外が発生します。

これが迅速なデバッグに役立つことを願っています。

于 2012-09-16T07:06:11.617 に答える