2016-06-19 3 views
0

JSON을 회 전자에 채우려하고 있지만 실패했습니다. 그리고 오류는 항상 KatArtcAdapter -> getView를 가리키고 치명적인 오류가 항상 표시됨 ArrayAdapter는 리소스 ID가 TextView 여야 함을 나타냅니다. 내 실수를 찾아 내도록 도와 주시겠습니까? 고급Json을 Android의 Spinner에 채우기

에 KatArtcAdapter.java

public class KatArtcAdapter extends ArrayAdapter<KategoriArt> { 
     private Activity context; 
     ArrayList<KategoriArt> data = null; 

     public KatArtcAdapter(Activity context, int resource,ArrayList<KategoriArt> data) { 
      super(context, resource, data); 
      this.context = context; 
      this.data = data; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      return super.getView(position, convertView, parent); 
     } 

     @Override 
     public View getDropDownView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      if (row == null) { 
       LayoutInflater inflater = context.getLayoutInflater(); 
       row = inflater.inflate(R.layout.spinner_item, parent, false); 
      } 

      KategoriArt item = data.get(position); 

      if (item != null) { // Parse the data from each object and set it. 
       TextView KatId = (TextView) row.findViewById(R.id.item_id); 
       TextView KatName = (TextView) row.findViewById(R.id.item_value); 
       if (KatId != null) { 
        KatId.setText(item.getIdKat()); 
       } 
       if (KatName != null) { 
        KatName.setText(item.getName()); 
       } 

      } 

      return row; 
     } 
    } 

MainActivity.Java

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, 
     RecyclerItemClickListener.OnItemClickListener{ 
    artikelAdapter mGridadapter; 
    JSONParser jParser= new JSONParser(); 
    JSONArray names=null; 
    private static final String URL_READ_KAT= "http://amobipets.azurewebsites.net/readKategoriArticle.php"; 
    private static final String TAG_PESAN = "message"; 
    private static final String TAG_HASIL = "result"; 
    private static final String TAG_ID_KAT = "id"; 
    private static final String TAG_KAT= "kategori"; 

    Spinner katyField; 
    ArrayList<KategoriArt> katList = new ArrayList<KategoriArt>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     katyField =(Spinner) findViewById(R.id.spinner); 
     new buildKatDropDown().execute(); 

     katyField.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       KategoriArt selectedKat=katList.get(position); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 
    } 
public class buildKatDropDown extends AsyncTask<String,String,String> { 

     int sukses=0; 

     public buildKatDropDown() { 
     } 

     @Override 
     protected void onPreExecute() { 
     } 

     @Override 
     protected String doInBackground(String... args) { 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      try 
      { 
       JSONObject json = jParser.makeHttpRequest(URL_READ_KAT, "GET", params); 
       if(json != null) 
       { 
        sukses = json.getInt(TAG_PESAN); 
        if(sukses == 1) 
        { 
         nameList = new ArrayList<HashMap<String,String>>(); 
         Log.d("Semua Nama: ", json.toString()); 
         names = json.getJSONArray(TAG_HASIL); 

         for(int i = 0; i < names.length();i++) 
         { 
          JSONObject c = names.getJSONObject(i); 
          String id = c.getString(TAG_ID_KAT); 
          String kategori = c.getString(TAG_KAT); 

          katList.add(new KategoriArt(id,kategori)); 

         } 

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

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      if(sukses==1) 
      { 
       KatArtcAdapter ktAdapter=new KatArtcAdapter(MainActivity.this,R.layout.spinner_item,katList); 
       katyField.setAdapter(ktAdapter); 
      } 
     } 
    } 
} 

스택 트레이스

을 주셔서 감사합니다

06-19 21 : 26 : 44.328 21749-21904/com.amobi.newlomapodfix D/url : http://amobipets.azurewebsites.net/readKategoriArticle.php? 06-19 21 : 26 : 44.375 21749-21867/com.amobi.newlomapodfix E/표면 : ​​getSlotFromBufferLocked : 알 수없는 버퍼 : 0xaaaa97d0 06-19 21 : 26 : 44.428 21749-21749/com.amobi.newlomapodfix W/설정 : airplane_mode_on을 설정하면 android.provider.Settings.System에서 android.provider.Settings.Global, (으)로 읽기 전용 값이 반환되었습니다. 06-19 21 : 26 : 44.493 21749-21904/com.amobi.newlomapodfix I/info : [email protected] 06-19 21 : 26 : 44.494 21749-21904/com. amobi.newlomapodfix D/Semua Nama :: { "결과": [{ "id": "11", "kategori": "안징"}, { "id": "21", "kategori": "Kucing" }, { "id": "31", "kategori": "Hamster"}, { "id": "41", "kategori": "Reptil"}], "message": 1} 06-19 21 : 26 : 44.704 21749-21749/com.amobi.newlomapodfix E/ArrayAdapter : TextView에 대한 리소스 ID를 제공해야합니다. 06-19 21 : 26 : 44.709 21749-21749/com.amobi.newlomapodfix D/AndroidRuntime : 시스템 종료 VM 06-19 21 : 26 : 44.728 21749-21749/com.amobi.newlomapodfix E/AndroidRuntime : FATAL 예외 : 주 프로세스 : com.amobi.newlomapodfix, PID : 21749 java.lang.IllegalSta teException는 : ArrayAdapter와는 COM에 android.widget.ArrayAdapter.getView (ArrayAdapter.java:369) 에서 android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:393) 에서 텍스트 뷰 될 자원 ID 필요하다. android.widget.Spinner.onMeasure (Spinner.java:580) 에서 android.widget.AbsSpinner.onMeasure (AbsSpinner.java:194) 에서 amobi.newlomapodfix.adapter.KatArtcAdapter.getView (KatArtcAdapter.java:30)에서 android.support.v7.widget.AppCompatSpinner.onMeasure (AppCompatSpinner.java:418) android.view.View.m android.view.View.measure에서 android.widget.FrameLayout.onMeasure (FrameLayout.java:194) 에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 easure (View.java:18788) (android.view.View.measure에서 android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:715) android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461) 에서 에서 View.java:18788) (보기 된 .java : 18788) android.support.design.widget.CoordinatorLayout에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 . android.support.design.widget.AppBarLayout $ ScrollingViewBehavior.onMeasureChild (AppBarLayout.java에서 onMeasureChild android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild (HeaderScrollingViewBehavior.java:90)에서 (CoordinatorLayout.java:664) : android.support.v4.widget에서 android.view.View.measure에서 android.support.design.widget.CoordinatorLayout.onMeasure (CoordinatorLayout.java:729) (View.java:18788) 에서 1,149) . DrawerLayout.onMeasure (DrawerLayout.java:1075) android.view.View.measure (View.java:18788) android.support.v7.widget.ContentFrameLayout.onMeasure에서 android.widget.FrameLayout.onMeasure에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) (FrameLayout.java:194) (ContentFrameLayout.java에서 : android.widget.LinearLayout.measureChildBeforeLayout에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) (LinearLayout.java:1465 135) android.view.View.measure (View.java:18788에서 ) ) android.widget.LinearLayout.measureVertical (LinearLayout.java:748) android.widget.LinearLayout.onMeasure (LinearLayout.java:630)android.widget.FrameLayout.onMeasure에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 android.view.View.measure (View.java:18788) (FrameLayout.java:194) 에서에서 로이드에서 android.view.View.measure android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465)에서 (View.java:18788) android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951)에서 .widget.LinearLayout.measureVertical (LinearLayout.java:748) android.widget.LinearLayout.onMeasure (LinearLayout.java:630) 에서 android.widget.FrameLayout.onMeasure (FrameLayout.java:194) 에서 android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) 에서 android.view.View.measure (View.java:18788)에서 com.android.internal.policy.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2643) android.view.View.View.measure (View.java:18788)에서 android.view.ViewRootImpl.performMeasure (ViewRootImpl.java : 2100) android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1216) at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1452) at android.view.ViewRootImpl.do android.view.Choreographer $ CallbackRecord.run (Choreographer.java:858) 안드로이드에서 에서 android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6013) 에서 순회 (ViewRootImpl.java:1107) . 안드로이드에서 android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:844) 에서 android.view.Choreographer.doFrame (Choreographer.java:606) 에서 view.Choreographer.doCallbacks (Choreographer.java:670) .os.Handler.handleCallback (Handler.java:739) android.os.Handler.dispatchMessage (Handler.java : 95) android.os.Looper.loop (Looper.java:148) at android.app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (네이티브 메소드) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726)

편집에서

Spinner_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1"> 

    <TextView 
     android:id="@+id/item_value" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.43"> 
    </TextView> 

    <TextView 
     android:id="@+id/item_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#FFFFFF" 
     android:layout_weight="0.10"> 
    </TextView> 

</LinearLayout> 
+0

'R.layout.spinner_item'을 표시 할 수 있습니까? –

+0

예 @ShreeKrishna –

+0

하나의 TextView 만 사용해 보셨습니까? 문제는 여전히 제기되고 있습니까? –

답변

1

this에서 언급했듯이 super.getView는 Adapter 인터페이스에 속합니다. 그것은 아무것도하지 않습니다.

ArrayAdapter를 사용자 정의 할 때 getView() 메소드에 대한 뷰를 리턴해야합니다. 이 example을 참조하십시오. 당신은이 같은 textViewResourceId으로 constructor 가진 4 개 매개 변수를 사용할 수 있습니다

당신이 주석에서 언급했듯이
+0

이제 끝났어. –

0

, 아직

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

큰 변화가 없을 것, 그 다음 하나의 텍스트 뷰와도 제기 것 하지만 코드는 여전히 제기 된 오류가 다른 레이아웃으로 TextView을 둘러싸고하지하려고하면

public KatArtcAdapter(Activity context, int resource,int textViewResourceId, ArrayList<KategoriArt> data) { 
      .... 
     } 

는 더 많은 정보를 위해 doc를 참조하십시오, 다음과 같이 보일 것입니다.