索引0中的方案中的java lang illegalstateexception字符

时间:2014-02-09 09:54:03

标签: android json illegalargumentexception

这是我的MainActivity.I我在这里使用Json。我知道我在我的字符串格式中做了一些错误。但我不知道我在哪里做错了。从log cat我得到"message": "myMessage1","myMessage2"]为什么只有一个结束括号。我不明白。

public class MainActivity extends Activity {
    TextView txtPostalCode;
    String content;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtPostalCode = (TextView) findViewById(R.id.t1);
        content = "{\"name\": \"myName\",\"message\": [\"myMessage1\",\"myMessage2\"],\"place\": \"myPlace\",\"date\": \"thisDate\"}";
        new ReadPlacesFeedTask().execute(content);

    }

    private class ReadPlacesFeedTask extends AsyncTask<String, Void, String> {
        protected String doInBackground(String... urls) {
            return new JsonParser().readJSONFeed(urls[0]);
        }

        protected void onPostExecute(String result) {
            try {
                JSONObject jsonObject = new JSONObject(result);
                JSONArray jarry = jsonObject.getJSONArray("message");
                for (int i = 0; i < jarry.length(); i++) {
                    JSONObject obj1 = jarry.getJSONObject(i);
                    Log.i("Name1:", "" + jsonObject.getString("myMessage1"));
                    Log.i("Name2:", "" + jsonObject.getString("myMessage2"));
                    Log.i("Name:", "" + jsonObject.getString("date"));

                }
                Log.i("Name111:", "" + jsonObject.getString("name"));
                Log.i("Name:12", "" + jsonObject.getString("place"));
                Log.i("Name:13", "" + jsonObject.getString("date"));

            } catch (Exception e) {
                Log.d("ReadPlacesFeedTask", e.getLocalizedMessage());
            }
        }
    }
}
02-09 15:07:21.242: E/AndroidRuntime(596): FATAL EXCEPTION: AsyncTask #1
02-09 15:07:21.242: E/AndroidRuntime(596): java.lang.RuntimeException: An error occured while executing doInBackground()
02-09 15:07:21.242: E/AndroidRuntime(596):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.lang.Thread.run(Thread.java:1096)
02-09 15:07:21.242: E/AndroidRuntime(596): Caused by: java.lang.IllegalArgumentException: Illegal character in scheme at index 0: {  "name": "myName",   "message": "myMessage1","myMessage2"],  "place": "myPlace",   "date": "thisDate" }
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.net.URI.create(URI.java:970)
02-09 15:07:21.242: E/AndroidRuntime(596):    at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
02-09 15:07:21.242: E/AndroidRuntime(596):    at com.example.webservice2.JsonParser.readJSONFeed(JsonParser.java:35)
02-09 15:07:21.242: E/AndroidRuntime(596):    at com.example.webservice2.MainActivity$ReadPlacesFeedTask.doInBackground(MainActivity.java:50)
02-09 15:07:21.242: E/AndroidRuntime(596):    at com.example.webservice2.MainActivity$ReadPlacesFeedTask.doInBackground(MainActivity.java:1)
02-09 15:07:21.242: E/AndroidRuntime(596):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-09 15:07:21.242: E/AndroidRuntime(596):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

1 个答案:

答案 0 :(得分:1)

好吧,我假设您的JsonParser::readJSONFeed方法需要一个URL作为参数,但您使用JSON文本作为参数调用它(urls[0]包含您提供给的content变量任务)。

尝试替换

return new JsonParser().readJSONFeed(urls[0]);

通过

return urls[0];

(事实上,在这种情况下你不需要任务)