我希望以编程方式从服务器更新我的array.xml。
我的MainActivity.java: -
public class MainActivity extends AppCompatActivity {
//private static String TAG = MainActivity.class.getSimpleName();
private Toolbar mToolbar;
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
int arraylistvalue = 0;
ArrayList<String> arraylist1,arraylist2,arraylist3,arrayList4,arrayList5;
int cnt = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
List<String> listDataHeader = new ArrayList<>();
String[] mItemHeaders = getResources().getStringArray(R.array.items_array_expandable_level_one);
Collections.addAll(listDataHeader, mItemHeaders);
ExpandableListView mExpandableListView = (ExpandableListView) findViewById(R.id.lvExp);
if (mExpandableListView != null) {
ParentLevelAdapter parentLevelAdapter = new ParentLevelAdapter(this, listDataHeader);
mExpandableListView.setAdapter(parentLevelAdapter);
}
arraylist1 = new ArrayList<String>();
arraylist2 = new ArrayList<String>();
arraylist3 = new ArrayList<String>();
arrayList4 = new ArrayList<String>();
arrayList5 = new ArrayList<String>();
new ProductsAsynTask().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/menu&key=test123$");
}
public class ProductsAsynTask extends AsyncTask<String,Void,Void>{
ProgressDialog dialog;
protected void onPreExecute(){
super.onPreExecute();
Log.d("In onPreExceute","");
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("Loading, Please wait");
dialog.setTitle("Connecting server");
dialog.show();
dialog.setCancelable(false);
}
protected Void doInBackground(String... param){
try{
Log.d("In doInBackground","");
HttpClient client= new DefaultHttpClient();
HttpPost post = new HttpPost(param[0]);
HttpResponse response = client.execute(post);
int status = response.getStatusLine().getStatusCode();
if(status == 200){
Log.d("Status",""+status);
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsonObject = new JSONObject(data);
JSONArray jArray = jsonObject.getJSONArray("categories");
for(int i = 0;i < jArray.length();i++){
cnt++;
Log.d("value of array",jArray.length()+"");
Log.d("Value of i",""+i);
JSONObject jsonObject1 = jArray.getJSONObject(i);
arraylist1.add(jsonObject1.getString("name"));
//data1 = jsonObject1.getString("name");
// Log.d("hello ",data1);
JSONArray jsonArray = jsonObject1.getJSONArray("children");
// JSONObject jsonObject2 = jsonObject1.getJSONObject("children");
for(int j=0;j<jsonArray.length();j++){
JSONObject jsonObject2 = jsonArray.getJSONObject(j);
arraylist2.add(jsonObject2.getString("name"));
// data2 = jsonObject2.getString("name");
JSONArray jsonArray1 = jsonObject2.getJSONArray("children_lv3");
for(int k=0;k<jsonArray1.length();k++){
JSONObject jsonObject3 = jsonArray1.getJSONObject(k);
arraylist3.add(jsonObject3.getString("name"));
arrayList4.add(jsonObject3.getString("href"));
/* data3 = jsonObject3.getString("name");
data4 = jsonObject3.getString("href"); */
}
arrayList5.add(jsonObject2.getString("href"));
// data5 = jsonObject2.getString("href");
}
}
}
}catch(IOException e){
Log.e("Error IOException :",e.getMessage());
}catch (JSONException e){
Log.e("Error JSONException",e.getMessage());
}
return null;
}
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
/* expListView = (ExpandableListView) findViewById(R.id.lvExp);
expListView.setAdapter(new ParentLevel());*/
Log.d("Counter value",""+cnt);
}
}
public class ParentLevel extends BaseExpandableListAdapter
{
@Override
public Object getChild(int arg0, int arg1)
{
return arg1;
}
@Override
public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
CustExpListview SecondLevelexplv = new CustExpListview(MainActivity.this);
SecondLevelexplv.setAdapter(new SecondLevelAdapter());
SecondLevelexplv.setGroupIndicator(null);
return SecondLevelexplv;
}
@Override
public int getChildrenCount(int groupPosition)
{
return 3;
}
@Override
public Object getGroup(int groupPosition)
{
return groupPosition;
}
@Override
public int getGroupCount()
{
int columr = arraylist1.size();
return columr;
}
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
{
TextView tv = new TextView(MainActivity.this);
tv.setText("");
tv.setBackgroundColor(Color.BLUE);
tv.setPadding(10, 7, 7, 7);
return tv;
}
@Override
public boolean hasStableIds()
{
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}
}
public class CustExpListview extends ExpandableListView
{
int intGroupPosition, intChildPosition, intGroupid;
public CustExpListview(Context context)
{
super(context);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public class SecondLevelAdapter extends BaseExpandableListAdapter
{
@Override
public Object getChild(int groupPosition, int childPosition)
{
return childPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
TextView tv = new TextView(MainActivity.this);
tv.setText("child");
tv.setPadding(15, 5, 5, 5);
tv.setBackgroundColor(Color.YELLOW);
tv.setLayoutParams(new ListView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return tv;
}
@Override
public int getChildrenCount(int groupPosition)
{
return 5;
}
@Override
public Object getGroup(int groupPosition)
{
return groupPosition;
}
@Override
public int getGroupCount()
{
return 1;
}
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
{
TextView tv = new TextView(MainActivity.this);
tv.setText("-->Second Level");
tv.setPadding(12, 7, 7, 7);
tv.setBackgroundColor(Color.RED);
return tv;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if(id == R.id.action_search){
Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
}
我的array.xml在这里: -
<resources>
<string-array name="items_array_expandable_level_one">
<item>Level 1.1</item>
<item>Level 1.2</item>
<item>Level 1.3</item>
</string-array>
<string-array name="items_array_expandable_level_one_one_child">
<item>Level 1.1.1</item>
<item>Level 1.1.2</item>
</string-array>
<string-array name="items_array_expandable_level_one_two_child">
<item>Level 1.2.1</item>
</string-array>
<string-array name="items_array_expandable_other_child">
<item>Second Level 01</item>
<item>Second Level 02</item>
<item>Second Level 03</item>
</string-array>
<string-array name="items_array_expandable_level_three">
<item>Child Level 01</item>
<item>Child Level 02</item>
</string-array>
如何在数据到来时更新我的列表。请帮助我,我是android开发的新手。提前谢谢!
答案 0 :(得分:0)
很遗憾,您无法在运行时修改资源。您可能需要考虑将xml存储在某处并在需要值而不是android上的资源时查询它。
您可以将xml存储在设备上,使用AssetManager创建一种访问这些文件的方法,然后创建一个Resources对象,使其与您已经使用的方式相同。
答案 1 :(得分:0)
存储在应用程序中的资源是在编译期间生成的,在运行时期间是read-only
。你无法修改它们。
您可以尝试使用SQlite数据库来存储信息。第一次运行应用程序时,它将从XML Array获取数据并存储在数据库中。下次从服务器更新时,您只需添加/修改数据库即可。