这是我的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)
答案 0 :(得分:1)
好吧,我假设您的JsonParser::readJSONFeed
方法需要一个URL作为参数,但您使用JSON文本作为参数调用它(urls[0]
包含您提供给的content
变量任务)。
尝试替换
return new JsonParser().readJSONFeed(urls[0]);
通过
return urls[0];
(事实上,在这种情况下你不需要任务)