2017-02-11 32 views
-2

大家好,我有問題,該列表爲空無法從對象獲取值我嘗試從JSON獲取數據,並在列表視圖中顯示它清單和空指針的Android


錯誤消息

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: vss.testvss, PID: 22745 
        java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
         at vss.testvss.MainActivity$JSONTask.onPostExecute(MainActivity.java:159) 
         at vss.testvss.MainActivity$JSONTask.onPostExecute(MainActivity.java:88) 
         at android.os.AsyncTask.finish(AsyncTask.java:660) 
         at android.os.AsyncTask.-wrap1(AsyncTask.java) 
         at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6077) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

mainactivity:

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.ListView; 

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

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 


public class MainActivity extends AppCompatActivity { 
    private ListView listView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

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



    } 
    public class JSONTask extends AsyncTask<String, String, List<Company>> { 
     List<Company> companyList = new ArrayList<>(); 
     @Override 
     protected List<Company> doInBackground(String... params) { 

      HttpURLConnection httpURLConnection = null; 
      BufferedReader bufferedReader = null; 

      try { 
       URL url = new URL(params[0]); 
       httpURLConnection = (HttpURLConnection) url.openConnection(); 
       httpURLConnection.connect(); 
       InputStream inputStream = httpURLConnection.getInputStream(); 
       // Through this we can read the data line by line 
       bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuffer stringBuffer = new StringBuffer(); 
       String line = ""; 
       while ((line = bufferedReader.readLine()) != null) { 
        stringBuffer.append(line); 
       } 

       String finalJSON = stringBuffer.toString(); 
       JSONObject parentObject = new JSONObject(finalJSON); 
       JSONArray parentArray = parentObject.getJSONArray("Companies"); 



       // For parsing a list of items you have to use for loop 
       for (int i = 0; i < parentArray.length(); i++) { 
        JSONObject object = parentArray.getJSONObject(i); 
        String n = object.getString("name"); 
        String lt = object.getString("latitude"); 
        String lg = object.getString("langitude"); 
        int id = object.getInt("id"); 
        int r = object.getInt("rate"); 
        Company company = new Company(n, id, r, lt, lg); 
        // Adding the finalObject in the List 
        Log.d("name from object",n); 
        Log.d("name from list",companyList.toString()); 
        companyList.add(company); 
       } 
       return companyList; 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 
       if (httpURLConnection != null) { 
        httpURLConnection.disconnect(); 
        try { 
         if (bufferedReader != null) { 
          bufferedReader.close(); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
      return companyList; 
     } 

     // Value returned by doInBackGround will be passed here... 

     @Override 
     protected void onPostExecute(List<Company> result) { 
      super.onPostExecute(result); 

      CompanyAdapter adapter = new CompanyAdapter(getApplicationContext(), R.layout.row, result); 
      //listView.setAdapter(adapter); 
     } 
    } 
} 

我跟蹤問題,並找到日誌 在對象返回值,但該列表顯示這樣的(從列表中d /名稱:[]或類似的從列表中爲該d /名稱:[[email protected]])

回答

5

刪除此行:

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

,並用替換:

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

和取消註釋行將Adapter設置爲ListView

+0

謝謝你的幫助是代碼的結構是對的我還在學習 – ososmam