2016-09-18 1 views
-3

JSON 데이터를 어댑터와 함께 listview에 전달하려고합니다.null 객체 참조에 가상 메소드 'void android.widget.ListView.setAdapter (android.widget.ListAdapter)'를 호출하려고합니다. 치명적인 오류

package ir.homa; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 

/** 
* Created by SMQ on 9/17/2016. 
*/ 
public class RoomTypeAdapter extends ArrayAdapter<RoomType> { 
    public RoomTypeAdapter(Context context, ArrayList<RoomType> roomType) { 
     super(context,0, roomType); 
    } 
    @Override 
    public View getView(int position , View ConvertView, ViewGroup parent){ 
     RoomType roomType = getItem(position); 
     if (ConvertView == null) { 

      ConvertView = LayoutInflater.from(getContext()).inflate(R.layout.item_type, parent, false); 
     } 
     TextView typeItem = (TextView) ConvertView.findViewById(R.id.itemRoomType); 
     typeItem.setText(roomType.RoomType); 
     return ConvertView; 
    } 



} 

이 변수가 포함되어 내 클래스 :이 내 어댑터입니다

09-18 17:03:46.787 6429-6429/ir.homa E/AndroidRuntime: FATAL EXCEPTION: main 
                Process: ir.homa, PID: 6429 
                java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.homa/ir.homa.HotelDetail}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                 at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                 at android.os.Looper.loop(Looper.java:135) 
                 at android.app.ActivityThread.main(ActivityThread.java:5221) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at java.lang.reflect.Method.invoke(Method.java:372) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
                 at ir.homa.HotelDetail.onCreate(HotelDetail.java:43) 
                 at android.app.Activity.performCreate(Activity.java:5937) 
                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)  
                 at android.app.ActivityThread.access$800(ActivityThread.java:144)  
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)  
                 at android.os.Handler.dispatchMessage(Handler.java:102)  
                 at android.os.Looper.loop(Looper.java:135)  
                 at android.app.ActivityThread.main(ActivityThread.java:5221)  
                 at java.lang.reflect.Method.invoke(Native Method)  
                 at java.lang.reflect.Method.invoke(Method.java:372)  
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)  
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)  

: 지금은 로그 캣에 오류가있어

package ir.homa; 

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

/** 
* Created by SMQ on 9/17/2016. 
*/ 
public class RoomType { 
    String RoomType; 
    String id; 
    public void setRoomType(JSONObject object) { 
     try { 
      this.RoomType = object.getString("description"); 
      this.id = object.getString("id"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

을이 내 MainActivity입니다 :

package ir.homa; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.VolleyLog; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.google.android.gms.appindexing.AppIndex; 
import com.google.android.gms.common.api.GoogleApiClient; 

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

import java.util.ArrayList; 

/** 
* Created by SMQ on 9/4/2016. 
*/ 
public class HotelDetail extends Activity { 


    // json array response url 
    private String urlJsonArry = "http://homa.qadamgahi.ir/bandar_result.json"; 
    private static String TAG = HotelDetail.class.getSimpleName(); 


    ArrayList<RoomType> typeList; 
    RoomTypeAdapter adapter; 
    ListView listView; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     typeList = new ArrayList<>(); 
     adapter = new RoomTypeAdapter(this, typeList); 
     listView = (ListView) findViewById(R.id.listv); 
     listView.setAdapter(adapter); 



     makeJsonObjectRequest(); 
     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     /* 
     ATTENTION: This was auto-generated to implement the App Indexing API. 
     See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
     GoogleApiClient client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 

    /** 
    * Method to make json object request where json response starts wtih { 
    * */ 
    private void makeJsonObjectRequest() { 



     JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, 
       urlJsonArry, null, new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
       Log.d(TAG, response.toString()); 

       // Parsing json object response 
       // response will be a json object 

       RoomType o = new RoomType(); 

       try { 

        for (int i = 0 ; i < typeList.size() ; i++) 
        { 


         RoomType add = new RoomType(); 
         add.id = response.getString("id"); 
         add.RoomType = response.getString("description"); 
         typeList.add(add); 
        } 

        adapter.notifyDataSetChanged(); 


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


      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_SHORT).show(); 
       // hide the progress dialog 

      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(jsonObjReq); 
    } 

} 

표시 방법 json 데이터에 listview를 채울 수 있습니까?이 문제는 무엇입니까?

+0

, 당신이 당신이 당신의보기를 초기화하지 않은 당신이하려고하는 중 하나를 의미하는'NullPointerException'입니다 어댑터 – Prashant

+0

을 설정하는 우편 번호 데이터를 채 웁니다. 또는 그보기가 레이아웃 XML 파일 내에 존재하지 않습니다. 또는 철자가 틀렸을 수도 있습니다. – Prashant

+0

죄송합니다 ... 내 MainActivity를 추가했습니다. – Mohammadreza

답변

1

setContentView() 방법을 잊어 버렸습니다. , 두 번 어댑터를 게시하는 방법 당신이 당신의`view`에 어댑터를 설정하는

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContetntView(R.layout.main_activity); 
    // rest of your code 
} 
+0

질문에 대답하기 위해, 나는 당신이 당신의 답을 수정했음을 알지 못했습니다. – Prashant

관련 문제