我正在尝试使用JSON
获取信息并在屏幕上显示,获取信息的网址如下:
https://searchcode.com/api/codesearch_I/?q=quicksort&per_page=100
JSON
如下:
"results": [
{
"repo": "https://github.com/robtsai/mathrocks.git",
"language": "Haskell",
"linescount": 8,
"location": "/algos_datastructures",
"name": "mathrocks",
"url": "https://searchcode.com/codesearch/view/71123349/",
"md5hash": "78fd0c4174ad9af35885b1275db3c805",
"lines": {
"1": "-- quicksort in haskell",
"2": "",
"3": "quicksort :: Ord a => [a] -> [a]",
"4": "quicksort [] = []",
"5": "quicksort (x:xs) = quicksort smallerHalf ++ [x] ++ quicksort largerHalf",
"6": "\twhere"
},
"id": 71123349,
"filename": "quicksort.hs"
},
在这里,我想获取name
,language
和url
属性。问题是name
和language
属性都返回了各自的值,但url
属性没有,它返回null。
代码如下:
ResultsList.java
public class ResultsList extends ListActivity {
private ProgressDialog pDialog;
// URL to get contacts JSON
private static String urlmain = "https://searchcode.com/api/codesearch_I/?q=";
private static final String addition="&per_page=100";
// JSON Node names
private static final String ARR_RESULTS="results";
private static final String OBJ_NAME="name";
private static final String OBJ_LANG="language";
private static final String OBJ_URL="url";
// Seach term
private static final String SEARCH_KEYWORD = "seachterm";
// contacts JSONArray
JSONArray contacts = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> resultsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results_list);
resultsList = new ArrayList<HashMap<String, String>>();
ListView listView=getListView();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.nameofrepo))
.getText().toString();
String lang=((TextView) view.findViewById(R.id.langofrepo))
.getText().toString();
String urlcode = ((TextView) view.findViewById(R.id.urlofcode))
.getText().toString();
Intent intent=new Intent(getApplicationContext(),
DisplayResults2.class);
intent.putExtra(OBJ_NAME, name);
intent.putExtra(OBJ_LANG,lang);
intent.putExtra(OBJ_URL, urlcode);
startActivity(intent);
}
});
Intent intent1=getIntent();
String search_item=intent1.getStringExtra(SEARCH_KEYWORD);
// Calling async task to get json
new GetContacts().execute(search_item);
}
/**
* Async task class to get json by making HTTP call
* */
class GetContacts extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
/*pDialog = new ProgressDialog(ResultsList.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();*/
}
@Override
protected Void doInBackground(String... search_term) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(urlmain+
URLEncoder.encode(search_term[0])+addition, ServiceHandler.GET);
Log.d("search term: ", "> " + search_term[0]);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
contacts = jsonObj.getJSONArray(ARR_RESULTS);
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String name = c.getString(OBJ_NAME);
String lang = c.getString(OBJ_LANG);
String url = c.getString(OBJ_URL);
// tmp hashmap for single contact
HashMap<String, String> single_result = new HashMap<String, String>();
single_result.put(OBJ_NAME, name);
single_result.put(OBJ_LANG, lang);
single_result.put(OBJ_URL, url);
// adding contact to contact list
resultsList.add(single_result);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
/*if (pDialog.isShowing())
pDialog.dismiss();*/
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(ResultsList.this,
resultsList, R.layout.row_item2, new String[] { OBJ_NAME,
OBJ_LANG,OBJ_URL }, new int[] { R.id.nameofrepo, R.id.langofrepo,
R.id.url });
setListAdapter(adapter);
}
}
}
在这里,我使用AsyncTask
来获取JSON
对象。然后,结果显示在listview
。
在String url = c.getString(OBJ_URL);
之后,我使用Log
来检查url
的值是否返回null。
Log.d("URL : ",url);
它让我logcat
显示了这个:
D/URL :: https://searchcode.com/codesearch/view/71123349/
02-23 12:52:31.950 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/46026229/
02-23 12:52:31.950 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/36082147/
02-23 12:52:31.950 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/49572716/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/116169728/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/39926774/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/107357332/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/114502986/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/51628740/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/49574358/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/100236697/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/76176571/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/55589993/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/65881790/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/46430083/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/49572625/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/49572701/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/49574429/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/65259684/
02-23 12:52:31.951 12979-13078/com.example.shaloin.codesearch D/URL :: https://searchcode.com/codesearch/view/119281487/
所以,我想这意味着url
被正确提取,但由于某些原因而未显示。
答案 0 :(得分:1)
你应该玩这个位置。
这应该有用。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// getting values from selected ListItem
String name = resultsList.get(position).get("name");
String language = resultsList.get(position).get("language");
String url = resultsList.get(position).get("url");
Intent intent=new Intent(getApplicationContext(),
MainActivity.class);
intent.putExtra(OBJ_NAME, name);
intent.putExtra(OBJ_LANG, language);
intent.putExtra(OBJ_URL, url);
startActivity(intent);
}
});
<强>更新强>
替换下面的代码,让我知道它是否有效。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.nameofrepo))
.getText().toString();
String lang=((TextView) view.findViewById(R.id.langofrepo))
.getText().toString();
String urlcode = ((TextView) view.findViewById(R.id.url))
.getText().toString();
Intent intent=new Intent(getApplicationContext(), DisplayResults2.class);
intent.putExtra(OBJ_NAME, name);
intent.putExtra(OBJ_LANG,lang);
intent.putExtra(OBJ_URL, urlcode);
startActivity(intent);
}
});
答案 1 :(得分:1)