2016-11-25 199 views
0

Json數據未在列表視圖中顯示。請檢查我的代碼代碼中缺少什麼。我在logcat中獲取數據,但未在列表視圖中顯示。請檢查感謝。Json解析數據不在列表視圖中顯示

com.example.nkrajput01.myapplication;

import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.text.method.ScrollingMovementMethod; 
import android.util.Log; 
import android.util.StringBuilderPrinter; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

import org.json.JSONArray; 
import org.json.JSONObject; 

import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.HashMap; 

public class MainActivity extends AppCompatActivity { 

ListView listView; 
ProgressDialog progressDialog; 
    ArrayList<HashMap<String, String>> contactList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     contactList = new ArrayList<>(); 

     listView = (ListView) findViewById(R.id.list); 




     /* FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     });*/ 



      new GetContacts().execute(); 


    } 

    private class GetContacts extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = new ProgressDialog(MainActivity.this); 
      progressDialog.setMessage("downloading content..."); 
      progressDialog.setCancelable(false); 
      progressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      String url = "http://api.androidhive.info/contacts/"; 
      try{ 
       URL url_ = new URL(url); 
       HttpURLConnection httpURLConnection = (HttpURLConnection)url_.openConnection(); 

       httpURLConnection.setRequestMethod("GET"); 

       InputStream in = new BufferedInputStream(httpURLConnection.getInputStream()); 

       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in)); 

       StringBuilder sb = new StringBuilder(); 
       int line=0; 

       while ((line=bufferedReader.read())!= -1) 
       { 
        sb.append((char) line); 

       } 


       Log.d("Data", sb.toString()); 


       String jsonString = sb.toString(); 

       JSONObject jsonObject = new JSONObject(jsonString); 

       JSONArray jsonArray = jsonObject.getJSONArray("contacts"); 


       for (int i = 0; i <jsonArray.length() ; i++) { 

        JSONObject c = jsonArray.getJSONObject(i); 

        String id = c.getString("id"); 
        String name = c.getString("name"); 
        String email = c.getString("email"); 
        String address = c.getString("address"); 
        String gender = c.getString("gender"); 

        JSONObject aa = c.getJSONObject("phone"); 
        String mobile = aa.getString("mobile"); 
        String home = aa.getString("home"); 
        String office =aa.getString("office"); 

        HashMap<String, String> contact = new HashMap<>(); 

        contact.put(id, "id"); 
        contact.put(name, "name"); 
        contact.put(email, "email"); 
        contact.put(mobile, "mobile"); 

        contactList.add(contact); 

       } 


      }catch (Exception e){ 
       e.printStackTrace(); 
      } 


      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      if (progressDialog.isShowing()) 

       progressDialog.dismiss(); 


       Log.d("ContactList", contactList.toString()); 

      ListAdapter adapter = new SimpleAdapter(
        MainActivity.this, contactList, 
        R.layout.list_item, new String[]{"name", "email", 
        "mobile"}, new int[]{R.id.name, 
        R.id.email, R.id.mobile}); 
       listView.setAdapter(adapter); 



     } 
    } 




    @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; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

回答

0

你似乎混淆了鍵和值對您的聯繫HashMap

contact.put(id, "id"); 
contact.put(name, "name"); 
contact.put(email, "email"); 
contact.put(mobile, "mobile"); 

第一個參數是關鍵,第二個是值的,所以代碼應該是:

contact.put("id", id); 
contact.put("name", name); 
contact.put("email", email); 
contact.put("mobile", mobile); 
+0

感謝它的工作原理 – user2822322

+0

如果這回答了您的問題,請將答案標記爲接受,方法是按左側的複選標記圖像。 –

相關問題