Android tumblr异常的JSONparsing
我试图自学在eclipse中创建android应用程序。我的项目是创建一个应用程序,显示来自tumblr帐户的图片 我从twitter和类似的应用程序中找到了som现有代码 我曾试图以我认为我的tumblr应用程序可以运行的方式修改代码。在花了几个小时试图找出什么地方出了问题以及为什么模拟器不断崩溃之后,我希望能在这里找到一些帮助 我的代码如下所示: 包com.example.example 公共类示例扩展了活动{Android tumblr异常的JSONparsing,android,json,android-activity,Android,Json,Android Activity,我试图自学在eclipse中创建android应用程序。我的项目是创建一个应用程序,显示来自tumblr帐户的图片 我从twitter和类似的应用程序中找到了som现有代码 我曾试图以我认为我的tumblr应用程序可以运行的方式修改代码。在花了几个小时试图找出什么地方出了问题以及为什么模拟器不断崩溃之后,我希望能在这里找到一些帮助 我的代码如下所示: 包com.example.example 公共类示例扩展了活动{ @Override public void onCreate(Bundle sa
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<Tweet> tweets = getTweets("my api key");
ListView listView = (ListView) findViewById(R.id.ListViewId);
listView.setAdapter(new UserItemAdapter(this, R.layout.listitem, tweets));
}
public class UserItemAdapter extends ArrayAdapter<Tweet> {
private ArrayList<Tweet> tweets;
public UserItemAdapter(Context context, int imageViewResourceId,
ArrayList<Tweet> tweets) {
super(context, imageViewResourceId, tweets);
this.tweets = tweets;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitem, null);
}
Tweet tweet = tweets.get(position);
if (tweet != null) {
ImageView image = (ImageView) v.findViewById(R.id.avatar);
if (image != null) {
image.setImageBitmap(getBitmap(tweet.image_url));
}
}
return v;
}
}
public Bitmap getBitmap(String bitmapUrl) {
try {
URL url = new URL(bitmapUrl);
return BitmapFactory.decodeStream(url.openConnection()
.getInputStream());
} catch (Exception ex) {
return null;
}
}
public ArrayList<Tweet> getTweets(String key) {
String searchUrl = "http://api.tumblr.com/v2/blog/www.richkidsofinstagram.tumblr.com/posts?api_key="
+ key;
ArrayList<Tweet> tweets = new ArrayList<Tweet>();
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(searchUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = null;
try {
responseBody = client.execute(get, responseHandler);
} catch (Exception ex) {
ex.printStackTrace();
}
JSONObject jsonObject = null;
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(responseBody);
jsonObject = (JSONObject) obj;
} catch (Exception ex) {
Log.v("TEST", "Exception: " + ex.getMessage());
}
JSONArray arr = null;
try {
Object j = jsonObject.get("results");
arr = (JSONArray) j;
} catch (Exception ex) {
Log.v("TEST", "Exception: " + ex.getMessage());
}
for (Object t : arr) {
Tweet tweet = new Tweet(((JSONObject) t).get("photos").toString());
tweets.add(tweet);
}
return tweets;
}
public class Tweet {
public String image_url;
public Tweet(String url) {
this.image_url = url;
}
}
有谁能发现这个问题吗?
非常感谢您的帮助!没有行号很难判断,但请在
getTweets
中尝试以下内容:
for ( int i=0 ; i<arr.length() ; i++ ) {
Tweet tweet = new Tweet( arr.getJSONObject( i ).getString( "photos" ) );
tweets.add( tweet );
}
尽可能使用,而不是通用的get()
不确定这是否有助于处理错误,但它将有助于保持代码更干净
更新
看起来原始代码是针对JSONSimple的
Android附带JSON解析,所以使用它没有多大意义,除非您需要它提供一些特定的东西
要使用Android默认值进行分析,请执行以下操作:
import org.json.JSONObject;
import org.json.JSONArray;
-
并删除现有的
JSONParser
代码。谢谢你的帮助,但现在我遇到了一个新问题。当我尝试你给我的代码时,eclipse说方法长度()对于JSONArray类型,getJSONObject方法是未定义的,但是当我检查javadoc时,它说这两个方法都在JSONArray中。我该如何处理这个问题?嗯,不确定会出什么问题…您正在导入org.json.JSONArray;
正确?并且没有下载/包含任何外部json库?。Android SDK来自从API第1级开始使用这些软件包。进一步看,您从哪里获得JSONParser
?这不是Android SDK附带的方法。您应该能够只新的JSONObject(responseBody)
要将json字符串直接转换成JSONObject,我在libs中包含了json_simple_1.1.jar,这样我就可以使用JSONParser方法,这可能是问题所在吗?我的代码使用的是常规Android json包,因此它不能与jsonSimple一起工作。我将在答案中更新代码。
try {
arr = jsonObject.getJSONArray("results");
} catch (Exception ex) {
Log.v("TEST", "Exception: " + ex.getMessage());
}
import org.json.JSONObject;
import org.json.JSONArray;
JSONObject jsonObject = new JSONObject(responseBody);